我有以下代码JSfiddle.
var a = 1;
function five() {
this.a = 5;
console.log(a); //JSfiddle prints the value 1
}
five()
Run Code Online (Sandbox Code Playgroud)
但是当我在Chrome控制台中粘贴相同的代码时,该功能会five()打印5.为什么?
Jam*_*rpe 14
默认情况下,JSFiddle将您的代码包装在window.onload事件中,因此您实际上正在运行此代码:
window.onload = function() {
var a = 1;
function five() {
this.a = 5;
console.log(a); //JSfiddle prints the value 1
}
five()
}
Run Code Online (Sandbox Code Playgroud)
这意味着它a是该函数的本地,同时this仍然引用全局对象(window).在没有包装函数的Chrome控制台中,var a创建一个全局变量,它在全局对象上创建并存储为属性,因此与window.a/ 相同this.a.
如果你转到JavaScript选项并选择"nowrap"选项之一,它也将登录5JSFiddle: