我有以下JavaScript:

var calc = {
    getMem: function(){
        return mem;
    },

    mem:0,

    add: function (a,b){
        mem =  a*b;
        return a*b;
    },
}

当我打电话
calc.getMem();

离开后我立即收到ReferenceError

但是,当我打电话
calc.add(3,2);
calc.getMem();

我收到预期的结果。

显然我错过了这个,所以我将getMem更改为
getMem: function(){
    return this.mem;
}

我的问题是:为什么在我第一次调用add时它在初始状态下(没有此状态)起作用?

最佳答案

调用cal.add时,您正在创建全局变量mem。因此似乎可行,因为getMem然后尝试访问该全局变量。但这可能不是您想要的。如果在getMem()之前调用add(),它仍在尝试访问全局mem,但尚未定义它,因此会出错。

var calc = {
  getMem: function(){
      return mem;
  },

  mem:0,

  add: function (a,b){
      mem =  a*b;
      return a*b;
  },
}
calc.add(2, 4)
console.log(mem) // available globally

09-18 01:59