【问题标题】:Function declaration - Function Expression - Scope函数声明 - 函数表达式 - 范围
【发布时间】:2010-11-10 05:14:08
【问题描述】:

在javascript中,函数声明和函数表达式在范围方面有什么区别?函数声明意味着我们正在污染全局空间。和函数表达式一样吗?

函数声明

function sum(){
 // logic goes here
}

函数表达式

var sum = function(){}

【问题讨论】:

标签: javascript scope


【解决方案1】:

两者在范围上是等价的。在另一个函数中声明的函数将不是全局的。不同之处在于您可以随时使用 declared 函数(因为它是在任何代码运行之前 hoisted 的),仅在您之后才将函数作为表达式分配给变量已经分配了。

(function () {

    bar(); // works
    function bar() { }  // is not global

    foo();  // doesn't work
    var foo = function () { };

})();

【讨论】:

    【解决方案2】:

    就污染封闭范围而言,两者都是等价的。请注意,它不一定是全局范围 - 它是声明函数的范围(本地函数在其他函数中是允许的)。在您的示例中,这两种方法都将名为 sum 的变量(函数对象)引入本地范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 2015-04-12
      • 2015-03-14
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      相关资源
      最近更新 更多