相关疑难解决方法(0)

可以在JavaScript中的语句内部显示函数声明吗?

请将官方ECMAScript规范视为您的答案来源,而不是特定浏览器供应商发布的文档.(我知道Mozilla使用"函数语句"扩展其JavaScript实现.)

那么,根据ECMAScript规范,ergo,其中定义的句法产品,这是有效的吗?

if (foo) {
    function x() { return; }
}
Run Code Online (Sandbox Code Playgroud)

更新:我的问题也可以这样说: Statement生产是否包含 FunctionDeclaration生产?

结论:答案是否定的.

javascript

17
推荐指数
1
解决办法
1534
查看次数

函数定义未提升

Wrt提升fxn定义.

if (true) {
  function foo() {
    alert(1)
  }
} else {
  function foo() {
    alert(2)
  }
}
foo()
Run Code Online (Sandbox Code Playgroud)

Chrome,大约2-3个月前 - 将打印2.现在,它打印1.我错过了什么,或者控制台停止在fxn上升!

DEMO - 打印1.我不知道在哪里可以找到旧浏览器版本的演示.可能是老款v8引擎的节点安装?目前的镀铬版 - 49

javascript hoisting

5
推荐指数
2
解决办法
155
查看次数

为什么函数声明在不同的浏览器中处理不同?

虽然我在google中找不到对此的引用,但我很熟悉这样一个事实,即在javascript中,全局函数声明在任何代码执行之前都会得到解释.换句话说,这很好用:

f();
function f() {}
Run Code Online (Sandbox Code Playgroud)

但是,我注意到chrome和firefox对全局函数声明的解释有不同的解释.特别是,chrome很高兴在第一遍中读取一个if块内的函数声明,但firefox却没有.

try {document.write(f);}               // works in chrome
catch(e) {document.write(e.message);}  // throws an error in firefox

try {document.write(g);}               // works in chrome and firefox
catch(e) {document.write(e.message);}

if(true) function f() {}
function g() {}
Run Code Online (Sandbox Code Playgroud)

你可以用这个小提琴自己尝试这个例子.我使用的是Chrome 16.0.912.75和Firefox 9.0.1.

这种行为的ECMA标准是什么?这个"提升"函数声明的过程是否有一个术语高于其他代码?什么代码被"解除"对解释是开放的(两种浏览器都是正确的)?或者是其中一个中的错误?

javascript firefox google-chrome

4
推荐指数
1
解决办法
5096
查看次数

标签 统计

javascript ×3

firefox ×1

google-chrome ×1

hoisting ×1