厌倦了猜测“这”指的是什么吗?
什么是this
?
如果您是 JavaScript 新手,那么遇到关键字的概念只是时间问题this
。this
关键字是当前代码正在执行的 JavaScript 上下文对象。JavaScript 代码执行时,是在特定的执行上下文中运行。浏览器首次加载脚本时,它处于全局执行上下文中。但是,一旦调用函数,就会形成一个新的执行上下文并将其推送到调用堆栈。
一开始,确定 的值this
可能感觉有点像变魔术,让你console.log()
在代码中抛出 。然而,你只需要遵循几条规则就能弄清楚this
指的是什么。首先要记住的最重要的一点是, 的值this
取决于函数的调用方式。查看函数的定义位置对你没有帮助。
确定价值的规则this
:
首先,我们检查new
在调用函数时是否使用了关键字。如果new
使用了,this
函数内部将引用new
运行时创建的全新对象Object.Create()
。
其次我们看看在调用函数时是否使用了apply、call或bind。this
函数内部将引用作为参数传入的对象来apply、call或bind。
第三,如果将函数作为方法调用,例如 obj.method() — this
将引用该函数所属的对象。
否则this
为全局对象。在浏览器中,它是window
对象。如果在严格模式下 ( 'use strict'
),this
它将undefined
代替全局对象。
需要注意的是,ES6 箭头函数会忽略上述所有规则。它们没有自己的this
,因此this
是由词法函数决定的。这意味着 JavaScript 会查看其周围的父级作用域来确定this
所引用的内容。
为什么this
甚至重要?
如果我们思考一下我们通常编写函数的原因,就会发现函数使得封装和复用逻辑变得容易。this
关键字 让我们决定调用函数时所需的上下文。通过使用 ,this
我们可以在不同的上下文或不同的对象中复用函数或方法。
如果您有任何问题、评论或反馈,请告诉我。关注我,每周更新 JavaScript、React、Python 和 Django 的文章!
鏂囩珷鏉ユ簮锛�https://dev.to/guin/tired-of-guessing-what-this-is-referring-to-3nfk