Js闭包:第二次调用时函数失败

时间:2014-08-02 10:45:18

标签: javascript closures

我有以下示例

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)()但在我调用它两次时失败 有谁可以帮忙。感谢。

2 个答案:

答案 0 :(得分:1)

因为您使用sumx的全局变量。使用var keyword:

将它们声明为local
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模式的好主意,然后thisundefined,并且不会引起您的混淆。

答案 1 :(得分:1)

问题是你在被叫之后正在改变sum

您的函数名称为sum。当你说

 sum += b; //you are changing `sum` in a number.

这就是为什么下次致电sumNumber is not a function

的原因

并使用sumx的局部变量。