咨询JS中this关键字理解规则的正确性与完整性
关于JavaScript中this关键字规则的修正与补充
你的总结方向没问题,但存在细节错误和遗漏,我帮你修正并补充完整:
针对
function关键字定义的函数:- 非严格模式下,this通常指向调用对象——可以是浏览器的
window/Node.js的global全局对象、类的实例、new关键字创建的新对象,或是DOM事件触发时的目标元素;如果没有明确调用对象(比如直接裸调用函数),this会默认指向全局对象。 - 严格模式下,裸调用函数时this会是
undefined;另外通过call()/apply()/bind()显式绑定的话,this会指向你指定的对象,哪怕是null或undefined。
- 非严格模式下,this通常指向调用对象——可以是浏览器的
针对箭头函数:
- 箭头函数没有自身的this,它的this是词法继承自定义时所在的外层作用域的this,也就是你所说的“直接闭合作用域”的this,但要注意,这个外层作用域必须是拥有自身this的环境(比如普通函数、类、全局作用域),如果外层也是箭头函数,会继续向上追溯。
- 补充:箭头函数不能用
new关键字调用,也无法通过call()/apply()/bind()改变它的this指向。
关于严格模式的错误纠正:
- 你搞反了规则:非严格模式下,无调用对象的函数this指向全局对象;严格模式下,这种场景的this才是
undefined。
- 你搞反了规则:非严格模式下,无调用对象的函数this指向全局对象;严格模式下,这种场景的this才是
内容的提问来源于stack exchange,提问作者kbl
相关产品推荐
相关产品推荐

