老师我这理解的正确吗?还有一些问题。。

来源:2-4 选择练习

聪U

2021-04-15 16:04:43

问题描述:

   该题中因为s.forEach()中是箭头函数,因为箭头函数没有自己的this,所以要根据作用域链查找自己所定义时的作用域,虽然第二个参数指定this指向obj对象,但是由于箭头函数没有自己的this问题,导致第二个参数没有实际效果,最终this指向全局作用域window。

    ​但是如果题目修改成一般函数(如下图1),此时作为匿名回调函数受s.forEach()调用执行时形成函数作用域,此时this指向为什么不是指向这个集合s。而且通过"严格模式"发现this先指向undefined-->window。还有一个就是定时器和延时器和这个形式一样(如图2),无论是严格模式还是非严格模式都是直接指向window,这是为什么呢?

相关截图:

http://img.mukewang.com/climg/6077f25309d00a6103390232.jpg

相关截图:

http://img.mukewang.com/climg/6077f36d09eccfa304150139.jpg

写回答

1回答

好帮手慕久久

2021-04-15

同学你好,解答如下:

1、如下理解是对的:

http://img.mukewang.com/climg/6077f6ce09eda2fd08380163.jpg

2、forEach是js为我们封装好的一个方法,它提供了第二个参数,利用该参数,可以让内部this指向s:

http://img.mukewang.com/climg/6077f76c097dbd1b04540170.jpg

如果没有传入第二个参数,那么该参数默认是undefined,即不传第二个参数时,forEach第一个回调函数中的this指向undefined,非严格模式下,转而指向window。

3、定时器、延时器也是同理,它们的this规定指向window。

js中,有一些内容是规定好的,有些甚至没有原因,就是那么规定的,我们记住规定,按照规定来使用就行。

上面两个this,同学记住即可。

祝学习愉快!

2

0 学习 · 15276 问题

查看课程