alert(myVar1);
return false;
var myVar1;
上面的代码在 IE、FF 和 Opera 中抛出错误,指出 return 语句必须出现在函数中。但它有效(显示undefined
)在 Safari 和 Chrome 中。
上面的代码是在全局范围内编写的。所有功能之外。
任何原因?
在 JavaScript 中,变量被移动到脚本的顶部然后运行。所以当你运行时它会做
var myVar1;
alert(myVar1);
return false;
这是因为 JavaScript 并没有真正意义上的词法作用域。这就是为什么将所有变量声明在它们将用于防止提升导致问题的区域的顶部被认为是最佳实践的原因。 JSLint 会对此抱怨。
这是一篇很好的文章,解释了这一点:http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting
退货无效。如果您想做一个真正的提升示例(取自上面的链接),请执行以下操作
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
这将提醒 10
以下是我的理解,我已在某处阅读过,但无法找到我阅读过的所有来源,因此欢迎更正。
此警报是由于 JavaScript JIT 中的差异而发出的。追踪猴子(http://ejohn.org/blog/tracemonkey/ http://ejohn.org/blog/tracemonkey/)我相信会采用 JavaScript 并进行快速静态分析,然后执行 JIT,然后尝试运行它。如果失败了,那么显然没有任何作用。
V8 不进行静态分析并转移到 JIT 然后运行这样的东西。它更类似于Python。如果您在 Chrome 的开发者控制台(Windows 中为 ctrl+shift+j)中运行该脚本,它会抛出错误,但也会运行并向您发出警报。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)