小编mic*_*mor的帖子

函数声明的求值顺序

对于以下代码,既不是 ES6,也不是“严格模式”,我预期结果为 'b',因为 的第二个声明foo应该覆盖第一个声明。但结果是“a”!

{
  function foo() {
    console.log('a');
  }
}

function foo() {
  console.log('b');
}

foo(); // 'a' ? Why not 'b'?
Run Code Online (Sandbox Code Playgroud)

当此代码被附加花括号括起来时,结果是预期的“b”。

{ // additional curly braces

  {
    function foo() {
      console.log('a');
    }
  }

  function foo() {
    console.log('b');
  }

  foo(); // 'b' as expected!

} // end additional curly braces 
Run Code Online (Sandbox Code Playgroud)

为了进一步说明,请考虑以下附加示例:

foo('before declaration'); // outcome:  from outside block :before declaration

{
  function foo(s) {
    console.log('from inside block: ' + s);
  }
}

function foo(s) {
  console.log('from …
Run Code Online (Sandbox Code Playgroud)

javascript

5
推荐指数
1
解决办法
114
查看次数

标签 统计

javascript ×1