下面的第二个console.log不返回2是什么?是否因为在分配thing = thing + 1
时在函数作用域内,thing
的分配只是另一个变量?不再引用传入的原始thing
参数了吗?
function change(thing) {
thing = thing + 1;
return thing;
}
let a = 1
console.log(change(a)) //2
console.log(a) //1
答案 0 :(得分:1)
那是因为在javascript中,当您将原始类型传递给“字符串”或“数字”之类的函数时,仅传递了一个副本,如果它是对象或数组,则值将发生变化,因为这些类型是通过引用传递的,例如:
<UKN>
答案 1 :(得分:0)
JavaScript总是按值传递,因此更改变量的值永远不会更改基础基元(字符串或数字)。
“按引用传递”仅适用于对象。在“按引用传递”中,通过直接传递变量的引用/地址作为参数来调用函数。在函数内部更改参数会影响从函数外部传递的变量。在Javascript对象和数组中,按引用传递。
function callByReference(varObj) {
console.log("Inside Call by Reference Method");
varObj.a = 100;
console.log(varObj);
}
let varObj = {a:1};
console.log("Before Call by Reference Method");
console.log(varObj);
callByReference(varObj)
console.log("After Call by Reference Method");
console.log(varObj);
在通过引用方法调用之前
{a:1}
通过引用方法进行内部呼叫
{a:100}
通过引用方法调用后
{a:100}