javascript-严格模式下“ this”关键字的默认绑定
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-严格模式下“ this”关键字的默认绑定,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1271字,纯文字阅读大概需要2分钟。
内容图文
我正在学习this关键字的工作原理,并读到,当一个函数被调用为简单明了且没有任何上下文对象或new关键字时,this关键字只是引用了global / window对象.但是,如果函数使用严格模式,则this关键字将设置为undefined.所以我写了这段代码来看看它是如何工作的:
function foo(){
"use strict";
alert(this.a);
}
var a = "Global A";
var obj = {
a : "Object's A",
foo : foo
}
setTimeout(obj.foo, 1000);
我以为我会收到一条错误消息,提示未捕获的TypeError:无法读取未定义的属性’a’.但是令我惊讶的是,输出是GlobalA.函数foo()是在严格模式下编写的.但是,此关键字仍指向全局对象.为什么输出Global A而不是TypeError?
解决方法:
这实际上取决于您使用的浏览器以及实施的严格程度.如果您使用的浏览器完美地实现了严格模式,则会看到该错误.
来自this的文档
In strict mode, however, the value of this remains at whatever it was set to when entering the execution context, so, in the following case, this will default to undefined:
function f2() {
'use strict'; // see strict mode
return this;
}
f2() === undefined; // true
因此,在严格模式下,如果执行上下文未定义它,则它将保持未定义状态.
注意:在第二个示例中,这应该是未定义的,因为f2是直接调用的而不是作为对象的方法或属性(例如window.f2()).某些浏览器刚开始支持严格模式时并未实现此功能.结果,他们错误地返回了window对象.
在我的浏览器中(最新的Chrome浏览器,我可以看到该错误)
https://jsfiddle.net/1mp0hq03/1/
内容总结
以上是互联网集市为您收集整理的javascript-严格模式下“ this”关键字的默认绑定全部内容,希望文章能够帮你解决javascript-严格模式下“ this”关键字的默认绑定所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。