Javascript将函数命名为表达式

时间:2012-05-07 14:56:04

标签: javascript function scope

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()时,我收到了引用错误。 [按我的预期]
  3. 案例2证明没有名为c的窗口属性可用 那么,d()如何设法在执行时打印c的定义?

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

1 个答案:

答案 0 :(得分:1)

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

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

另见the relevant section of the ECMAScript 5 spec。它有一个特别的说明。