var sigmaAnswer = 0
var sigmaFinder = function(start,finish,arguement){
for(var i = start; i<=finish;i++ ){
sigmaAnswer += arguement
}
console.log(sigmaAnswer)
}
免责声明:我是一个相当新的JS,所以尽量用简单的术语来保持。
编辑:我将= +更改为+ = 编辑2:从函数内部删除“var”。
答案 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推荐的
添加一个例子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);