Javascript:自我调用函数中的'Variable Not Defined'

时间:2011-09-24 16:31:01

标签: javascript scope

我编写了以下代码,输出平方迭代数的总和:

(function () {
    var i = 4, sum = 0; 
    while(i--) sum+=i*i;
})();
console.log(sum);

问题是我在控制台中收到以下错误:sum是未定义的,除非我取出总和并将其声明为全局范围: //这有效,但这不是我想要的。

sum = 0;    
(function ( ) {
    var i=4 
    while(i--) sum+=i*i;
})();
console.log(sum);

有人可以帮助我理解吗? 感谢

4 个答案:

答案 0 :(得分:5)

var sum = (function ( ) {
  var i=4, sum = 0; 
  while(i--) sum+=i*i;
  return sum;
})();
console.log(sum);

您创建了一个名为sum的局部变量,并希望在其范围之外使用它。您不希望在更高的范围内声明它,因此您必须导出它。

导出本地(原始)变量的唯一方法是return语句。

答案 1 :(得分:3)

自调用函数有自己的作用域(即变量存活的地方),因此sum在函数和所有相关闭包完成执行后不再存在,并且无法从外部访问。实际上,拥有一个不会破坏全局或任何其他范围的独立范围是人们使用自执行函数的主要原因。

答案 2 :(得分:1)

因为您正在访问功能范围之外的sum行: console.log(sum),其中总和不可见。

如果您不想将sum放在全局范围内,那么您必须在函数范围内使用语句console.log(sum)

答案 3 :(得分:0)

您在函数内部定义sum是局部变量。并在超出范围的功能之外打印总和。