2011-09-24 47 views
1

我写了下面的代码输出平方迭代数字的总和内:的Javascript:“变量没有定义”自我调用函数

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

的问题是,我得到控制台以下错误:金额是不确定的除非我拿出这个数字并将其声明为全球范围: //这个工作,但这不是我想要的。

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

有人能帮我理解吗? 谢谢

+0

这是一个范围问题。您不能在声明范围之外使用'sum'变量。如果您要在全局范围内记录sum,那么您必须在全局范围内声明它。我发现使用上面存在的代码没有任何问题。 –

回答

1

因为您在功能范围之外的线路上访问sumconsole.log(sum),其中sum不可见。

如果您不想将sum置于全局范围内,那么您必须在功能范围内声明console.log(sum)

3

自调用函数有其自己的范围(即为变量居住),所以sum在函数和所有相关闭包完成执行后不再存在,并且不能从外部访问。事实上,拥有一个不会破坏全局或其他范围的单独范围是人们使用自我执行功能的主要原因。

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

您创建了一个名为sum的局部变量,并希望在它的作用域之外使用它。你不想在更高的范围内宣布它,所以你必须出口它。

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

0

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