来自 社会 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

前端面试题:企业面试真题—1

第一次的结果比较好辨认, fn函数尽管经过了传递, 但是在第 8 行代码当中, 函数是直接调用, this显然指向window对象 那么打印出来的window.length, 肯定就是10了
第二次的结果, 执行函数时, 写法有所不同 arguments首先是个对象 第9行, arguments[0], 其实等价于 arguments.0 在这里你把0看做一个属性名称 就像平时访问对象属性那样obj["age"] 因此就不难理解 arguments.0(); 那么this当然就会指向arguments 所以就打印了arguments.length , 结果为2