Javascript为自己分配全局变量

时间:2010-12-10 14:42:08

标签: javascript

任何人都可以解释这个(全球范围内的代码)

var a = a || 4 // a exists & is 4
window.a = window.a || 4 // a exists & is 4
window.a = a || 4 // a is undefined error
a = a || 4 // a is undefined error

解释这4个作业之间的区别是什么,以及为什么有些人正确处理它,但其他人没有。

[编辑]此特定示例已在V8 Chrome控制台上进行了测试。

1 个答案:

答案 0 :(得分:4)

var a = a || 4 // var a is evaluated at compile time, so a is undefined here
window.a = window.a || 4 // window.a is simply undefined
window.a = a || 4 // no var a, therefore the variable doesn't exist, = reference error
a = a || 4 // again, no var, reference error

var语句在最近的封装范围中声明变量/函数,并将其设置为undefined。当没有var时,根本没有声明变量/函数。因此参考错误。

一些例子。

function声明:

foo(); // works
function foo() {}

bar(); // TypeError: undefined is not a function
var bar = function(){};

var声明:

function test(foo) {        
    if (foo) {
        var bar = 0; // defined at compile time in the scope of function test
    } else {
        bar = 4; // sets the bar above, not the global bar
    }
    return bar;
}

console.log(test(false)); // 4
console.log(bar); // ReferenceError