相关疑难解决方法(0)

ES6中块级函数的精确语义是什么?

我试图通过阅读原始规范来围绕ES6中新的标准化块级功能.我的肤浅理解是:

  • ES6中允许块级函数声明.
  • 他们升到了街区的顶部.
  • 在严格模式下,它们在包含块外部不可见.

然而,由于这些语义的一部分被指定为"可选的"并且仅对于Web浏览器是必需的(附件B),因此这进一步复杂化.所以我想填写下表:

                                             |  Visible outside of block?  |  Hoisted? Up to which point?  |   "TDZ"? |
------------------------------------------------------------------------------------------------------------------------
|   Non-strict mode,   no "web extensions"   |                             |                               |          |
|   Strict mode,       no "web extensions"   |                             |                               |          |
|   Non strict mode,   with "web extensions  |                             |                               |          |
|   Strict mode,       with "web extensions" |                             |                               |          |

另外我不清楚在这种情况下"严格模式"是什么意思.这种区别似乎在附件B3.3中引入,作为函数声明的运行时执行的一些附加步骤的一部分:

1. If strict is false, then
...
Run Code Online (Sandbox Code Playgroud)

但是,据我所知,strict[[Strict]]的是函数对象的内部插槽.这是否意味着:

// Non-strict …
Run Code Online (Sandbox Code Playgroud)

javascript formal-semantics ecmascript-6

19
推荐指数
1
解决办法
5031
查看次数

对{}中的函数声明感到困惑

var a;
if (true) {
  a = 5;

  function a() {}
  a = 0;
  console.log(a)
}
console.log(a)
Run Code Online (Sandbox Code Playgroud)

我看到了上面的代码,在{}中声明了一个函数。我认为它会打印0 0,但它会打印0 5

javascript

14
推荐指数
1
解决办法
287
查看次数

为什么条件块中的函数声明在Chrome中升级到功能范围而不是Firefox?

为什么以下代码在Chrome和Firefox之间输出不同的结果?

f = function() {return true;}; 
g = function() {return false;}; 
(function() { 
   if (g() && [] == ![]) { 
      f = function f() {return false;}; 
      function g() {return true;} 
   } 
})(); 
console.log(f());
Run Code Online (Sandbox Code Playgroud)

在Chrome中:结果是false.但是,在Firefox中,它是true.

以上代码的关键行是第4行,根据我对函数名称提升的了解,该函数g应该在第6行,即第2行被第6行覆盖.IMO,Chrome的行为是正确的.

我对吗?如果是这样,为什么Firefox输出不同的结果?

javascript firefox google-chrome

13
推荐指数
1
解决办法
1314
查看次数

输出结果为1,请问这是什么原因

我想知道为什么输出是“1”。

var a
{
  a = 1
  function a() {}
  a = 3
}
console.log(a) // 1
Run Code Online (Sandbox Code Playgroud)

javascript

6
推荐指数
1
解决办法
155
查看次数