Native浏览器和Node.js中的JavaScript函数声明,得到不同的结果

下面的代码在Browser和Node.js中会有所不同。

浏览器的结果是a

Node.js的结果是b

 if (1) { function foo() { return 'a'; } } else { function foo() { return 'b'; } } console.log(foo()); 

虽然这种代码风格是反模式,但代码仍然可以在环境中运行。

如何解释?


仅供参考。

  • Node.js环境链接: https : //repl.it/CgWh

  • 本地浏览器环境链接: https : //repl.it/CgWj

这些链接可能不是永久的。

JavaScript引擎不提升JavaScript的function相同的方式,所以你可以期望浏览器/节点之间的不同行为。

这是一个例子: http : //statichtml.com/2011/spidermonkey-function-hoisting.html

好的,所以我查看了你的代码,并在本地浏览器和nodeJS上进行了分析。 据我所知,在节点的第二个声明同名的函数被覆盖,但它不是在本地浏览器JavaScript的情况下。 要进一步观察两个环境的工作,请使用以下代码,您将看到不同之处:

 if (1) { console.log('In condition 1'); function foo() { console.log('Inside first declaration'); return 'a'; } } else { console.log('In condition 2'); function foo() { console.log('Inside second declaration'); return 'b'; } } console.log(foo()); 
 if (1) { foo(); } else { foo1(); } function foo() { return 'a'; } function foo1() { return 'b'; } console.log(foo()); 

块中的函数行为可能不同。 上面的代码完美地按预期工作。