Javascript ReferenceError:未定义对象属性
我有以下JavaScript:Javascript ReferenceError:未定义对象属性,javascript,Javascript,我有以下JavaScript: var calc = { getMem: function(){ return mem; }, mem:0, add: function (a,b){ mem = a*b; return a*b; }, } 当我打电话时 calc.getMem(); calc.add(3,2); calc.getMem(); 我马上得到一个参考错误 然而,当我打电话时 calc.g
var calc = {
getMem: function(){
return mem;
},
mem:0,
add: function (a,b){
mem = a*b;
return a*b;
},
}
当我打电话时
calc.getMem();
calc.add(3,2);
calc.getMem();
我马上得到一个参考错误
然而,当我打电话时
calc.getMem();
calc.add(3,2);
calc.getMem();
我收到了期望的结果
显然我错过了这个,所以我把我的getMem改为
getMem: function(){
return this.mem;
}
我的问题是:当我第一次调用add时,为什么它在初始状态(没有这个)下工作?当您调用
cal.add
时,您正在创建一个全局变量mem
。所以它看起来是有效的,因为getMem
正在尝试访问该全局文件。但这可能不是你想要的。如果在add()
之前调用getMem()
,它仍在尝试访问全局mem
,但它尚未定义,因此出现错误
var计算={
getMem:function(){
返回mem;
},
成员:0,
加:功能(a、b){
mem=a*b;
返回a*b;
},
}
计算添加(2,4)
console.log(mem)//全局可用
calc
不是一个类,这不是设置对象值的方式,如果您添加console.log()inside offadd
,您可以看到,mem
在那里未定义,因此
mem = a*b;
将名为mem
的全局变量设置为a*b
,而不是本地值
calc={
getMem:function(){
返回mem;
},
成员:0,
加:功能(a、b){
console.log(mem)
mem=a*b;
返回a*b;
},
}
calc.add(0,0)
当调用函数getMem()
时,它无法找到任何名为mem
的局部或全局变量,这就是为什么会出现引用错误。当您执行add()
函数时,它会在全局范围内创建一个变量mem
,因此现在当您调用getMem()
global variablemem
时,将返回该变量
在strict
模式下执行程序,您将得到参考错误。
“使用严格的”
变量计算={
getMem:function(){
返回mem;
},
成员:0,
加:功能(a、b){
mem=a*b;
返回a*b;
},
}
计算添加(2,4)
console.log(mem)
该死,我想这就是为什么应该使用严格模式。Ha@Vanice——是的,我想每个人都会因为这样的事情而相信严格模式。当你有了JS的C#背景时,你会期待“对象”的这种成员行为:)谢谢你的所有答案,我从现在开始会使用严格模式来防止这样的问题