NodeJS抱怨如果在if语句中设置了对象,则该对象是未定义的

时间:2014-07-22 14:27:50

标签: javascript node.js variables scope declaration

我有以下代码:

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中的情况 - 如果是这样,那么错误信息在哪里?!

干杯!

1 个答案:

答案 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