我有以下代码:
var inNode = function () {
return (typeof module !== 'undefined' && module.exports) ? true : false;
};
if (inNode()) {
global.TestObj = { 'test' : 'hello!' };
} else {
var TestObj = { 'test' : 'hello!' };
}
console.log(TestObj);
TestObj将返回undefined。
我在其他编程语言中理解,如果在if语句中声明了一个变量然后尝试调用它,编译器会抱怨。我并不认为这是Javascript中的情况 - 如果是这样,那么错误信息在哪里?!
干杯!
答案 0 :(得分:3)
由于JavaScript中variable hoisting的概念,所有变量声明都会移到范围的顶部,因此您的代码实际上是:
var inNode = function () {
return (typeof module !== 'undefined' && module.exports) ? true : false;
};
var TestObj;
if (inNode()) {
global.TestObj = { 'test' : 'hello!' };
} else {
TestObj = { 'test' : 'hello!' };
}
console.log(TestObj);
这意味着 已定义,但只有执行else
块时才有值。否则它是undefined
。