var x;//in case the function pointing to global x instead of function x
let func = () => {
var x;
let get=()=>console.log("value of x = ",x);
let set=(val)=>{x=val;console.log("value of x setted = ",x);}
return {get,set}
}
func().set(10);//returns value of x = 10
func().get();//returns value of x setted = undefined
这里我将x
的值设置为某个值,并且我在设置后尝试获取值x
,get方法返回undefined。它应该像我预期的那样10
...帮助我。范围问题可能是我想的原因......提前谢谢。
答案 0 :(得分:2)
每次拨打func
时,都会创建两个不同的对象。当您通过第一个call
设置值时,它会创建一个新对象并设置丢失的第一个对象的值,因为您不保留该引用。对于第二次调用,它会再次创建一个新对象,因为您没有为第二个调用设置值,所以得到undefined
。
let func = () => {
var x;
let get=()=>console.log("value of x = ",x);
let set=(val)=>{x=val;console.log("value of x setted = ",x);}
return {get,set}
}
const obj = func();
obj.set(10);
obj.get();
更新后
您的本地x
变量会影响全局变量。访问该函数中的x
始终会获得function scoped
变量x
- var x
。
let x;
let func = () => {
let get=()=>console.log("value of x = ",x);
let set=(val)=>{x=val;console.log("value of x setted = ",x);}
return {get,set}
}
func().set(10);
func().get();
答案 1 :(得分:1)
创建一个局部变量并调用函数
let func = () => {
var x;
let set=(val)=>{x=val;console.log("value of x setted = ",x);}
let get=()=>console.log("value of x = ",x);
return {get,set}
}
var f=func();
f.set(10);
f.get();
// func().set(10);//returns value of x = 10
// func().get();//returns value of x setted = undefined