我有以下示例
function sum (a){
this.sum = a;
this.x = function (b){
if (b == undefined ){
return sum;
}else
{
sum+=b;
return x;
}
}
return x;
}
它首次适用于此类调用sum(1)(2)(3)()
但在我调用它两次时失败
有谁可以帮忙。感谢。
答案 0 :(得分:1)
因为您使用sum
和x
的全局变量。使用var keyword:
function sum(a) {
var sum = a;
var x = function (b) {
if (b == undefined) {
return sum;
} else {
sum += b;
return x;
}
}
return x;
}
sum(1)(2)(3)() // 6
sum(1)(2)(4)() // 7
在这种情况下,函数内部的上下文(this
)是全局对象,因此当执行该函数时,它设置两个全局变量,用数值重新定义原始sum
函数。
请记住,如果处理普通函数而不是构造函数(this
),则永远不要使用new Something()
。这就是use strict
模式的好主意,然后this
会undefined
,并且不会引起您的混淆。
答案 1 :(得分:1)
问题是你在被叫之后正在改变sum
。
您的函数名称为sum
。当你说
sum += b; //you are changing `sum` in a number.
这就是为什么下次致电sum
说Number is not a function
并使用sum
和x
的局部变量。