在全局命名空间中使用var

时间:2017-04-28 08:54:31

标签: javascript global-variables this

我正在阅读"你不知道javascript"我在书中找到了一个例子,并且#34;这个&对象原型"。

讨论this的不同规则时,特别是在"隐式绑定"段落,作者给出了这个例子:

function foo() {
    console.log( this.a );
}

var obj = {
    a: 2,
    foo: foo
};

var bar = obj.foo; // function reference/alias!

var a = "oops, global"; // `a` also property on global object

bar(); // "oops, global"

然而,当在JSFiddle上尝试这个时,我在控制台中得到一个未定义的输出而不是" oops,global"。

相反,如果我定义a没有var或使用window.a,我会得到作者想要的输出而不管严格模式。

为什么会这样? ES6中的某些内容是否会改变应声明全局变量的方式?

1 个答案:

答案 0 :(得分:2)

JS Fiddle的默认设置将JS包装在一个函数中,并将其指定为 load 事件处理程序。

您的测试不在全球范围内。

JS Fiddle Default JS Configuration