a();
function a() {
$('.doit').text('Text was replaced (a)');
}
if ($('.doit2').length) {
b();
function b() {
$('.doit2').text('Text was replaced (b)');
}
}
正确调用 a()
,而b
则出错"b is not defined"
。为什么呢?
(我已经读过关于提升但是function b
被宣布,而不是变量。或者我错了?)
请参阅fiddle - Firefox正在引发错误,而Chrome正常运行。
答案 0 :(得分:1)
根据Javascript规范,条件(或任何其他块)中不允许函数声明。因此,这是技术上未定义的行为。有些浏览器试图创建合理的行为。但是,您不应该依赖浏览器能够正确解释这一点。
FunctionDeclarations只允许出现在Program或 函数体。从语法上讲,它们不能出现在Block({...})中 - 例如if,while或for语句。
http://kangax.github.io/nfe/#function-declarations-in-blocks