在使用最新ECMA的if语句中,Firefox在功能提升方面技术上是否正确?

时间:2015-10-23 14:26:39

标签: javascript hoisting ecma262

我了解到以下内容在FF中不起作用,并且在所有其他标准浏览器中都有效。

if(jQuery){
    importantScript();

    function importantScript(){
        console.log("this is important");
    };
}

这是因为FF不会在if语句中提升函数。这听起来像是一个规则,但我正在阅读page 533 (B.3.3),B.3.4这里是悬崖笔记:

  

在ECMAScript 2015之前,ECMAScript规范没有定义   将FunctionDeclaration作为Block的元素出现   声明的StatementList。但是,支持那种形式   FunctionDeclaration是一个允许的扩展,大多数是浏览器托管的   ECMAScript实现允许它们。不幸的是,   这些声明的语义在这些实现中是不同的。   由于这些语义差异,现有的Web ECMAScript代码   使用块级函数声明只能在其中移植   浏览器实现,如果用法仅取决于语义   所有浏览器实现的交集   声明。以下是属于该用例的用例   交叉语义:

     
      
  1. 声明一个函数,仅在单个块中引用

  2.   
  3. 声明一个函数,并且可能在单个块中使用,但也由未包含的内部函数定义引用   在同一个街区内。

  4.   
  5. 声明一个函数,可能在一个块中使用,但也在后续块中引用

  6.   

你能帮我解释一下吗?我觉得上面的代码符合上述技术规则。

0 个答案:

没有答案