javascript函数作用域如何与参数一起使用?

时间:2018-08-19 22:08:59

标签: javascript scope arguments

下面的第二个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

2 个答案:

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