值型別和引用型別

2022-01-21 06:22:03 字數 1757 閱讀 8850

1.區別:

複雜資料型別

2.一些面試題

2.1.構造乙個函式,給陣列中的節點設定事件處理程式,當點選乙個節點時,alert出節點的序號(這道題更多的出現在閉包知識上)

click me

click me

click me

click me

click me

var nodes = document.getelementsbyclassname("btn");

var click_handlers = function(nodes)

}};click_handlers(nodes);

其實這道題目在關於閉包的知識點中,應該是特別熟悉的一道題。而我也承認,之前真的是似懂非懂,只知道上面寫的,只能彈出最後乙個節點的數字:5。現在重新回過頭來看這道題的話,才知道這用值型別引用型別來解釋的話,會是如此簡單明瞭。

內部函式在使用外部變數i的時候,用的是引用,而非複製。意思就是給每個節點設定onclick事件的時候,將i的引用傳遞給了alert,當再點選節點觸發onclick的時候,i的值已經變成了nodes.lenght++,即5。
優化後:

var click_handlers = function(nodes)

}for (i = 0, l = nodes.length; i < l; i ++)

};

這裡是因為傳遞進去的是i的值的複製。
2.2.看下面的
function function(person) ;

return person;

}var p1 = ;

var p2 = function(p1);

console.log(p1); // -> ?

console.log(p2); // -> ?

2.3.請寫出下列輸出:
var a = ;

var b = a;

a.x = 2;

console.log(b.x);//2

a = ;

console.log(b.x);//2

a.x = 4;

console.log(b.x);//2

ab指向同乙個位址,其中乙個改變,另外乙個也會跟著改變。故第乙個b.x=2;而當a =後,a被賦值了乙個新的物件,位址也就變成了乙個新的位址,於是與原來的就沒什麼關係了,ab便變成了指向兩個不同位址的物件:a指向x=3b指向x=2

2.4.請寫出下列輸出:

var a = ; 

var b = a;

a.x = a = ;

console.log(a.x);//?

console.log(b.x);//?

關於js的賦值運算子
3.結語

多多看一些文章、書籍,理解理解,原來一切並沒有想象中的那麼難。今年開始,文章先發表在了掘金主頁了喲,因此就滯後點了~

引用型別和值型別

c 是一種型別安全的語言。每乙個變數都要求定義為乙個特定的型別,並且要求儲存在變數中的值只能是這種型別的值。變數既能儲存值型別,也可以儲存引用型別,還可以是指標。這一課將講述前兩種型別,關於指標的討論我們將在下一課中進行。下面是關於值型別和引用型別不同點的概論 如果乙個變數v儲存的是值型別,則它直接...

引用型別和值型別

c 中值型別和引用型別作為方法引數傳遞的時候其實都可以說是 值 的傳遞,只不過這裡的 值 指代的東西有所區別。當方法的引數為值型別時,方法傳遞的是值本身的值。當方法的引數為引用型別時,方法傳遞的則是應用型別的引用的位址,也就是引用型別位址在棧上的值。舉個引用型別作為引數傳遞的例子 static vo...

值型別和引用型別

為了更好地說明兩種型別之間的區別,借用如下的 來說明 值型別引用型別 記憶體分配地點 分配在棧中 分配在堆中 效率效率高,不需要位址轉換 效率低,需要進行位址轉換 記憶體 使用完後,立即 使用完後,不是立即 等待gc 賦值操作 進行複製,建立乙個同值新物件 只是對原有物件的引用 函式引數與返回值 是...