JS:为什么函数声明顺序在条件块内部很重要?

时间:2015-07-16 06:54:59

标签: javascript hoisting

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正常运行。

1 个答案:

答案 0 :(得分:1)

根据Javascript规范,条件(或任何其他块)中不允许函数声明。因此,这是技术上未定义的行为。有些浏览器试图创建合理的行为。但是,您不应该依赖浏览器能够正确解释这一点。

  

FunctionDeclarations只允许出现在Program或   函数体。从语法上讲,它们不能出现在Block({...})中 -   例如if,while或for语句。

http://kangax.github.io/nfe/#function-declarations-in-blocks