我有以下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时,它为什么在inital状态下工作(没有这个)?
发布于 2018-09-13 16:58:17
calc不是一个类,这不是您如何设置对象值的方法,如果在add内部添加一个console.log(),您可以看到mem是未定义的,所以行
mem = a*b;将名为mem的全局变量设置为a*b,而不是本地值,
calc = {
getMem: function(){
return mem;
},
mem:0,
add: function (a,b){
console.log(mem)
mem = a*b;
return a*b;
},
}
calc.add(0,0)
你必须用this.mem来设置它
"use strict";
const calc = {
getMem: function(){
return this.mem;
},
mem:0,
add: function (a,b){
this.mem = a*b;
return a*b;
},
}
calc.add(2,3)
console.log(calc.getMem())
并在this.mem函数中返回getMem
发布于 2018-09-13 17:00:49
当您调用函数getMem()时,它无法找到任何名为mem的局部变量或全局变量,这就是您获得引用错误的原因。当您执行add()函数时,它在全局范围内创建一个变量mem,所以现在当您调用getMem()时,将返回全局变量mem。
在strict模式下执行程序,您将得到引用错误。
"use strict"
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)
https://stackoverflow.com/questions/52318382
复制相似问题