首页 > 解决方案 > javascript 函数范围如何与参数一起使用?

问题描述

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

标签: javascriptscopearguments

解决方案


这是因为在 javascript 中,当您将原始类型传递给“字符串”或“数字”之类的函数时,只会传递一个副本,如果它是一个对象或数组,那么值会改变,因为这些类型是通过引用传递的,例如:

function change(thing) {
  thing.value = thing.value + 1;
  return thing;
}

let a = {value: 1};

console.log(change(a)) 
console.log(a) 


推荐阅读