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
a
和b
指向同乙個位址,其中乙個改變,另外乙個也會跟著改變。故第乙個b.x=2
;而當a =
後,a
被賦值了乙個新的物件,位址也就變成了乙個新的位址,於是與原來的就沒什麼關係了,a
、b
便變成了指向兩個不同位址的物件:a
指向x=3
,b
指向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 賦值操作 進行複製,建立乙個同值新物件 只是對原有物件的引用 函式引數與返回值 是...