我有以下代码:

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将返回未定义。

我知道在其他编程语言中,如果在if语句中声明变量然后尝试调用它,则编译器会抱怨。我认为JavaScript中不是这种情况-如果是这样,错误消息在哪里?

干杯!

最佳答案

由于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

关于javascript - NodeJS提示如果在if语句中设置了对象,则该对象未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24890107/

10-09 14:31