2

Javascript代码

var d = function c() { console.log(c); };
d(); // function c() { console.log(c); }; 
c(); // Reference Error

我理解变量提升的概念,其中变量声明和函数定义被提升到现有范围的顶部。函数表达式中的函数定义也不会被提升。

所以,上面将是

var d;
d = function c() { console.log(c); };
d();
c();

因此 d 是对命名函数 c 的引用

  1. 在执行d()函数时 c 在全局范围内执行,其中没有名为 c 的变量或属性。但是控制台仍然设法记录c的函数定义。
  2. 当我尝试时,c()我得到了一个参考错误。[如我所料]

案例 2 证明没有名为 c 的窗口属性可用 那么,如何d()在执行时打印 c 的定义?

每个函数在其本地范围内都有自己的定义作为属性吗?

4

1 回答 1

1

是的。命名函数表达式仅在该函数范围内生成与函数名称相对应的变量。

这是一篇关于这个主题的优秀但冗长的文章:http: //kangax.github.com/nfe/

另请参阅ECMAScript 5 规范的相关部分。它对此有一个具体的说明。

于 2012-05-07T14:59:13.330 回答