繁体   English   中英

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

[英]How does javascript function scope work with 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

那是因为在javascript中,当您将原始类型传递给诸如“ string”或“ number”之类的函数时,仅传递一个副本,如果它是对象或数组,则值将发生变化,因为这些类型是通过引用传递的,例如:

 function change(thing) { thing.value = thing.value + 1; return thing; } let a = {value: 1}; console.log(change(a)) console.log(a) 

Javascript总是按值传递,因此更改变量的值永远不会更改基础基元( String或number )。

通过引用传递仅对对象发生。 在“按引用传递”中,通过直接传递变量的引用/地址作为参数来调用函数。 在函数内部更改参数会影响从函数外部传递的变量。 在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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM