箭头函数不会与this进行绑定,其this指向取决于该箭头函数同级作用域的this指向,又由于对象不能形成自己的作用域,因此其作用域为全局作用域,this指向Window对象
执行下列选项的程序,输出结果不是Window对象的是()
A
B
C
D
(function(){
console.log(this);
}());
正确答案:B
在setTimeout()定时器中,this指向Window对象,A选项不符合题意;
通过new Star()来调用Star函数,由于使用new绑定,Star函数内部的this指向new创建的实例,而非Window对象,B选项符合题意;
箭头函数不会与this进行绑定,其this指向取决于该箭头函数同级作用域的this指向,又由于对象不能形成自己的作用域,因此其作用域为全局作用域,this指向Window对象,C选项不符合题意;
D选项,立即执行函数的this指向Window对象,D选项不符合题意。
this的四种绑定形式
(1.默认绑定 2.隐式绑定 3.显式绑定 4.new绑定)
A. 默认绑定,指向window
B. new绑定,指向new创建的对象
C. 以为是隐式绑定指向o?用了箭头函数哦,所以还是window
D. 默认绑定,指向window
不懂this绑定的看下文,或者一句话总结:谁调用this,this指向谁
fn() 光秃秃的,默认绑定,指向this,无论在哪里调用都是
实际上是window.fn() window调用,指向window
obj.fn() 隐式绑定,指向obj,obj在调用
call()、apply()、bind 显式绑定,要指向谁就写在()里面
new fn() new绑定,指向new创建的对象
默认绑定
只要是 fn() 这种孤单单的函数执行的 this都是默认绑定,指向window,无论这个fn()在哪里,被嵌套多少层都是指向window
A.定时器1秒后 执行函数 function(){...} 就是fn()形式,默认绑定指向window
同理D也是
主要问题就是C:不细看以为是指向o,但这里用了箭头函数,箭头函数没有自己的this,会去找外层的this当做自己的this,因此还是指向window。
new绑定
new一个对象所作的四件事情
新建一个对象
把this的指向指向这个对象
执行构造函数内的代码
返回这个新对象
箭头函数不是找上一层作用域,是找最近 包住箭头函数 的 普通的函数function{} 的this作为自己的this,如果上一层是箭头函数,也会去上上一层找,甚至上上上一层,直到找到全局对象window。
箭头的函数没有自己的this,this是靠包住 箭头函数的普通函数给的, 1.找普通函数 2.这个普通函数要包住箭头函数
你这个箭头函数都没有普通函数包着一直顺着作用域找到window,this指向是window
new创建的对象 新建一个对象 把this指向这个对象 执行构造函数内的代码 返回新的对象
使用箭头函数绑定的时候,this是静态绑定的。
__EOF__

本文链接:https://www.cnblogs.com/longmo666/p/17836192.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)