为什么JSfiddle和Chrome控制台会返回相同功能的不同值?

Zip*_*Zip 8 javascript scope

我有以下代码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:

在此输入图像描述