【发布时间】:2015-04-10 07:34:22
【问题描述】:
我发现以下在 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 的实现是不正确的。
如果删除了inner的“var”,那么inner函数在第一次执行后就会被提升为全局函数。我的理解正确吗?
【问题讨论】:
-
我正在使用
Firefox 37.0.1,我的控制台输出如下:The result is 4ReferenceError: inner is not defined -
您之前是否在某处声明过
inner函数? -
我第一次使用不带 var 的内部运行时,因此将内部作为全局范围运行,然后运行上面的代码,其中内部带有 var(即私有)函数,然后我看到了问题。我也在使用 Fiefox 37.0.1。
-
我在关闭火狐浏览器并再次运行上述代码后再次测试,此时我看到结果为:“结果为4”未定义。
-
我在关闭火狐浏览器并再次运行上述代码后再次测试,此时我看到结果为:结果为4未定义。因此,看起来一旦函数在全局范围内运行,它就会一直存在,直到浏览器或控制台关闭。在现在看到相同行为的所有浏览器中检查相同。谢谢大家的澄清。
标签: javascript google-chrome firefox