我了解到以下内容在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代码 使用块级函数声明只能在其中移植 浏览器实现,如果用法仅取决于语义 所有浏览器实现的交集 声明。以下是属于该用例的用例 交叉语义:
声明一个函数,仅在单个块中引用
声明一个函数,并且可能在单个块中使用,但也由未包含的内部函数定义引用 在同一个街区内。
- 醇>
声明一个函数,可能在一个块中使用,但也在后续块中引用
你能帮我解释一下吗?我觉得上面的代码符合上述技术规则。