按值傳遞
兩個變數間賦值時,以及給函式傳參時,只是將原變數中的值復制一個副本給對方變數或形參變數
對于原始型別(number, bool, string…)的值,修改新變數,不影響原變數
var a=5;
var b=a;
b++;
console.log(a); //5

對于參考型別的值(Object,Array…)的值,因為傳參和賦值時,復制的是地址值的一個副本,修改新的變數中的屬性,是會影響原變數的
var d={f:1};
var e=d;
e.f++;
console.log(d.f); //2

注:要注意看 賦值時,以及 給函式傳參時,要傳遞的值到底是原始型別還是參考型別,參考型別的值是存盤了一個地址值,只會把地址值復制一份出去,地址相同,都是指向同一個物件,只有有一個地方改,所有指向這里的都會改變,
一句話,參考型別復制的是地址的指向,
易錯點
var j={f:1};
var h=j;
h = {f:2};
console.log(j.f); //1
{ } 大括號等同于new Object(),所以 h = {f:2}; 實際上是新創建的物件,是把新的物件的地址值賦值給到了 h,h 從此不再保存之前 j 物件的地址,所以,此時輸出 j.f,還是 1
鄙視題
function setName(obj) {
obj.name = 'aaa';
return obj;
}
var person = new Object();
person.name = 'bbb';
var newPerson = setName(person);
console.log(person.name + ' | ' + newPerson.name); // aaa | aaa
function setName(obj) {
obj.name = 'aaa';
return obj;
}
var person = new Object();
person.name = 'bbb';
var newPerson = setName(person);
console.log(person.name + ' | ' + newPerson.name); // aaa | aaa
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/77125.html
標籤:其他
上一篇:c語言寫掃雷新手詳解
