值未按预期设置

时间:2017-10-09 06:52:13

标签: javascript

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 ...帮助我。范围问题可能是我想的原因......提前谢谢。

2 个答案:

答案 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