我发现在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"被删除为内部,内部函数在首次执行后被提升为全局函数。我的理解是正确的吗?
答案 0 :(得分:2)
由于inner被声明为" var",我猜Chrome上的输出是正确的,因为函数" inner"充当私人功能。我认为firefox的实现是不正确的。
两者都不正确。由于inner
的范围限定在分配给outer
的函数中,因此尝试从console.log(inner(5));
的位置访问它应该抛出一个ReferenceError,因为它没有被声明。
是我在Firefox和Chrome中testing your code时获得的行为。
如果" var"被删除为内部,内部函数在首次执行后被提升为全局函数。我的理解是正确的吗?
是(除非您在严格模式下运行代码,在这种情况下,当您尝试将值分配给inner
时,您会收到错误,因为您无法在任何地方var inner
)。