来自 社会 2020-08-18 15:36 的文章
前端面试题:企业面试真题—1
1. var length = 10;
2. function fn() {
3. console.log(this.length);
4. }
5. var obj = {
6. length:5,
7. method: function(fn){
8. fn();
9. arguments[0]();
10. }
11. }
12. obj.method(fn,3)
先说运行结果 : 10 , 2
解析:
两次打印的结果, 其实fn这个函数 关键点, 就在于, 我们要搞清楚, 每次执行时的this到底是谁?
关于this的理解,可以参考这篇文章
如何讲清楚this指向?zhuanlan.zhihu.com
第一次的结果比较好辨认, fn函数尽管经过了传递, 但是在第 8 行代码当中, 函数是直接调用, this显然指向window对象 那么打印出来的window.length, 肯定就是10了
第二次的结果, 执行函数时, 写法有所不同 arguments首先是个对象 第9行, arguments[0], 其实等价于 arguments.0 在这里你把0看做一个属性名称 就像平时访问对象属性那样obj["age"] 因此就不难理解 arguments.0(); 那么this当然就会指向arguments 所以就打印了arguments.length , 结果为2