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());
块中的函数行为可能不同。 上面的代码完美地按预期工作。