为什么找到Sigma符号系列之和的函数会出错?

时间:2014-03-23 21:37:04

标签: javascript

var sigmaAnswer = 0
var sigmaFinder = function(start,finish,arguement){
    for(var i = start; i<=finish;i++ ){
        sigmaAnswer += arguement
    }
    console.log(sigmaAnswer)
}

免责声明:我是一个相当新的JS,所以尽量用简单的术语来保持。

编辑:我将= +更改为+ = 编辑2:从函数内部删除“var”。

3 个答案:

答案 0 :(得分:1)

这有一些问题;一些未成年人,另一些则不那么重要。

首先,您在外部范围声明var sigmaAnswer。据推测,您希望在sigmaFinder内修改该变量。但是,您在sigmaAnswer内声明了一个名为sigmaFinder new 变量,隐藏来自外部作用域的变量。如果您希望引用外部范围中的变量,则需要从内部var中删除sigmaAnswer

其次,sigmaAnswer =+ arguement可能不会做你想要的。换句话说,你写了sigmaAnswer = (+arguement)。对于代码x+x只返回x,因此您已获得大约sigmaAnswer = arguement。您可能需要+=,相当于sigmaAnswer = sigmaAnswer + arguement

最后,我会假设你这样称呼它:

sigmaFinder(0, 10, i);

如果是这样,我相信你的意图是让第三个参数成为i未绑定的表达式,并且只有在将其添加到sigmaAnswer后才绑定。遗憾的是,JavaScript并不是那样的。它会尝试在当时和那里找到i的值,并且在那时,范围内没有i,并且它会因{{1}而失败}。

对此的答案比其他人更棘手。我们需要创建一个函数并将其传递出去,而不是传递一个像工作中那样简单的表达式。例如:

ReferenceError

然后,在function f(i) { return i } sigmaFinder(0, 10, f) 中,我们无法使用sigmaFinder,但我们必须使用arguement来显式调用该函数。幸运的是,有一种比编写命名函数并将其传入更简洁的方法:您可以使用匿名函数:

arguement(i)

我认为这是你的所有问题,但最后我应该注意到你的拼写错误,但实际上并没有破坏任何内容:sigmaFinder(0, 10, function(i) { return i }) 应拼写错误arguement

答案 1 :(得分:0)

你还没有确切地说你的代码是怎么出错的,但是我会猜测问题是你在函数外声明和初始化sigmaAnswer的方式,当你可能想要在功能

其次,我猜测“sigma”应该是一个求和函数,但你写的函数实际上并不是一个总和。你写的是这个:

    var sigmaAnswer =+ arguement

当你真的想要这个时(注意转置的+和=符号):

    sigmaAnswer += arguement

=++=都是有效的JavaScript,但它们意味着非常不同的东西。

此外,var声明和初始化应该在循环之前。

答案 2 :(得分:0)

只是为icktoofay推荐的

添加一个例子

http://jsfiddle.net/DPMmS/

var sigmaAnswer = 0;
var sigmaExpression = function (i){ return i;};
var sigmaFinder = function(start,finish,arguement){
for(var i = start; i<=finish;i++ ){
     sigmaAnswer += arguement(i);
}
alert(sigmaAnswer);
};

sigmaFinder(1, 12, sigmaExpression);