Chrome和firefox之间的Javascript函数范围不一致,哪一个是正确的

时间:2015-04-10 07:34:22

标签: javascript google-chrome firefox

我发现在Chrome和Firefox上执行的以下Javascript代码有不同的行为:

var outer = function (param) {
  var inner = function (theinput) {
    return theinput * 2;
  };
  return 'The result is ' + inner(param);
};

console.log(outer(2));

console.log(inner(5));

Result on Firefox:
"The result is 4"
10

Result on Chrome:
"The result is 4"
undefined

由于inner被声明为" var",我猜Chrome上的输出是正确的,因为函数" inner"充当私人功能。我认为firefox的实现是不正确的。

如果" var"被删除为内部,内部函数在首次执行后被提升为全局函数。我的理解是正确的吗?

1 个答案:

答案 0 :(得分:2)

  

由于inner被声明为" var",我猜Chrome上的输出是正确的,因为函数" inner"充当私人功能。我认为firefox的实现是不正确的。

两者都不正确。由于inner的范围限定在分配给outer的函数中,因此尝试从console.log(inner(5));的位置访问它应该抛出一个ReferenceError,因为它没有被声明。

是我在Firefox和Chrome中testing your code时获得的行为。

  

如果" var"被删除为内部,内部函数在首次执行后被提升为全局函数。我的理解是正确的吗?

是(除非您在严格模式下运行代码,在这种情况下,当您尝试将值分配给inner时,您会收到错误,因为您无法在任何地方var inner )。