js中关于this指向的训练题

2020-07-06 17:50:46 浏览数 (2)

this指向是js开发中必须掌握的知识,今天我们就用一道题目来看看你的基础。

各位认为会输出什么呢?请大家先思考不要直接去运行看答案。

实际上会输出:5和2。

首先我们找到method,里面的两段代码实际都是执行了fn函数,只是this对象不同。

(1):第一行fn(),这个毫无疑问,this指向的是window,所以length自然输出5,大家不要看到fn()在obj对象里面调用,就把this认为指向了obj,这是非常错误的;

this指向谁,是在于函数执行时的环境对象,fn()在执行时,他的环境对象依然是window,这里的fn()大家可以理解为window.fn(),是这样进行执行的。

(2):第二行arguments[0]();大家都知道这个对象是获取函数参数列表的,我们调用method一共传入了两个参数,第一个为fn函数,第二个则是10这个数字,arguments[0]则取了fn这个函数变量指针,然后在后面加上()执行了这个函数。

重点是,在arguments中有一个length属性,是记录一共传入几个参数。 

        所以,这里大家可以理解为:arguments[0]()=arguments.fn();

this对象就是指向了arguments,length也自然是2了。

大家明白了吗,这道题对于this指向还是比较经典的题目,如果这道题可以独立做出来,证明this指向这块,你基本上是过关的。

0 人点赞