javascript 对象的值未更改(通过引用传递)
value of javascript object not changing (pass by reference)
function outerFunction(x){
return function(y){
x=x+1;
console.log(x+y);
}
}
var myVal = new Number(2); //myVal is an object
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2}
var innerFunction = outerFunction(myVal); //I'm passing myVal obj
innerFunction(10) //13
innerFunction(10) //14
innerFunction(10) //15
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2} instead of 5?
我希望最后一个 console.log
打印 Number{[[PrimitiveValue]]: 5}
,因为我将 myVal object
传递给了 outerFunction
并且在 JS 中对象是通过引用传递的,为什么它没有'打印 5?
使用 console.log 的简单说明(在这种情况下请检查 javascript 在控制台中打印的内容):
function outerFunction(x){
return function(y){
console.log("type of x", typeof x);
console.log("value x:",x);
console.log("value y:",y);
x=x+1;
console.log(x+y);
}
}
var myVal = new Number(2); //myVal is an object
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2}
var innerFunction = outerFunction(myVal); //I'm passing myVal obj
innerFunction(10) //13
innerFunction(10) //14
innerFunction(10) //15
console.log("type of myval",typeof myVal);
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2} instead of 5?//
这是您的代码中发生的事情。
==> 首先,您不能使用 + 运算符在 javascript 中添加两个对象。因此 javascript 将其转换为数字或字符串(在本例中为数字,因为您传递的是数字本身,这是原始类型)
==> 您返回的内部函数具有来自外部函数的 X 外部引用。 (因为关闭)
==> 每次递增 X 时,外部函数范围内的 x 值都会发生变化,但它现在对全局 "myVal" 变量(类型对象)没有影响,因为 javascript将本地 X 视为原始类型(在第一点中解释过,它们按值传递而不是按引用传递)
==> 所以全局值保持不变,X 不断变化,内部函数访问它,这就是为什么你看到 13,14,15 作为答案
希望对您有所帮助
function outerFunction(x){
return function(y){
x=x+1;
console.log(x+y);
}
}
var myVal = new Number(2); //myVal is an object
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2}
var innerFunction = outerFunction(myVal); //I'm passing myVal obj
innerFunction(10) //13
innerFunction(10) //14
innerFunction(10) //15
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2} instead of 5?
我希望最后一个 console.log
打印 Number{[[PrimitiveValue]]: 5}
,因为我将 myVal object
传递给了 outerFunction
并且在 JS 中对象是通过引用传递的,为什么它没有'打印 5?
使用 console.log 的简单说明(在这种情况下请检查 javascript 在控制台中打印的内容):
function outerFunction(x){
return function(y){
console.log("type of x", typeof x);
console.log("value x:",x);
console.log("value y:",y);
x=x+1;
console.log(x+y);
}
}
var myVal = new Number(2); //myVal is an object
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2}
var innerFunction = outerFunction(myVal); //I'm passing myVal obj
innerFunction(10) //13
innerFunction(10) //14
innerFunction(10) //15
console.log("type of myval",typeof myVal);
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2} instead of 5?//
这是您的代码中发生的事情。
==> 首先,您不能使用 + 运算符在 javascript 中添加两个对象。因此 javascript 将其转换为数字或字符串(在本例中为数字,因为您传递的是数字本身,这是原始类型)
==> 您返回的内部函数具有来自外部函数的 X 外部引用。 (因为关闭)
==> 每次递增 X 时,外部函数范围内的 x 值都会发生变化,但它现在对全局 "myVal" 变量(类型对象)没有影响,因为 javascript将本地 X 视为原始类型(在第一点中解释过,它们按值传递而不是按引用传递)
==> 所以全局值保持不变,X 不断变化,内部函数访问它,这就是为什么你看到 13,14,15 作为答案
希望对您有所帮助