javascript變數賦值或者重新賦值注意事項
變數賦值是javascript程式碼編寫過程中最為常見的操作,看如下程式碼:
[JavaScript] 純文字檢視 複製程式碼var num=1;
上面的程式碼是多麼的簡單平凡,沒啥好說的,繼續看一段程式碼:
[JavaScript] 純文字檢視 複製程式碼var obj={ webName:"螞蟻部落", url:"softwhy.com" }
上面的這個程式碼也是如此的簡單,但是其實兩者的區別還是很大的。
第一個程式碼變數中儲存的內容值型別的,儲存變數的位置也是儲存值的位置,都位於棧中。
第二個程式碼變數中儲存的內容是引用型別的,變數中儲存的僅僅是物件在堆中的記憶體地址,變數位於棧中,但是物件卻位於堆中。
再來看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼var obj={ webName:"螞蟻部落", url:"softwhy.com" } obj=function (param){ return function(){ return param } }(obj) console.log(obj().webName);
上面的程式碼中輸出值是"螞蟻部落",也許有不少朋友認為,既然obj物件已經變成函式了,為什麼還是能夠正確的傳遞引數,並且輸出相應的屬性值,下面就分析一下這方面的原因。
1.var obj={
webName:"螞蟻部落",
url:"softwhy.com"
},建立一個物件直接量,變數obj儲存的是物件的引用,可以理解為物件在堆中的記憶體地址,但是變數obj位於棧中。
2.obj=function (param){
return function(){
return param
}
}(obj),上面的程式碼總體上是一個賦值語句,等號兩端是兩個表示式,首先會計算右側的表示式的值,這個時候為匿名函式傳遞的obj的值依然是指向物件直接量的引用(傳遞引數obj的時候其實是在棧中對變數做了一個複製),然後返回一個函式物件並賦值給變數obj,這個時候obj儲存的內容已經變為指向函式物件的引用。
3.obj().webName,obj()執行的時候返回的是一個儲存指向物件直接量的引用的變數,於是obj().webName返回"螞蟻部落"。
相關文章
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- 變數的賦值 指標間接賦值變數賦值指標
- Go Quiz: 從Go面試題看變數的零值和初始化賦值的注意事項GoUI面試題變數賦值
- Javascript 解構賦值,將屬性/值從物件/陣列中取出,賦值給其他變數JavaScript賦值物件陣列變數
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用賦值語句賦值SQL變數賦值
- 變數的解構賦值變數賦值
- shell 變數賦值問題變數賦值
- shell變數命名與賦值變數賦值
- php變數賦值給jsPHP變數賦值JS
- python 多變數賦值Python變數賦值
- JavaScript 同時宣告多個變數並賦值JavaScript變數賦值
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-對BOOLEAN變數賦值SQL變數賦值Boolean
- 複製物件重新賦值不改變原物件物件賦值
- 物件屬性值賦給變數物件變數
- 給物件引用變數賦值(轉)物件變數賦值
- JavaScript 連等賦值JavaScript賦值
- jQuery data-*賦值或者獲取值程式碼例項jQuery賦值
- JavaScript ECMAScript 6 筆記 -2 《變數的解構賦值》JavaScript筆記變數賦值
- JavaScript函式引數解構賦值JavaScript函式賦值
- c#小灶——常量、變數和賦值C#變數賦值
- AC-DMIS 5.3 V變數賦值變數賦值
- shell中變數的取值與賦值變數賦值
- 再說mysql中的變數賦值MySql變數賦值
- JavaScript 字串解構賦值JavaScript字串賦值
- JavaScript 物件解構賦值JavaScript物件賦值
- js判斷一個變數是否已經宣告或者宣告未賦值JS變數賦值
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用SELECT INTO賦值SQL變數賦值
- 【c++】深賦值與淺賦值C++賦值
- JS中的變數賦值深入理解JS變數賦值
- 列表切片賦值給另一個變數賦值變數
- go語言變數的宣告與賦值Go變數賦值
- 自己對Java中if變數賦值的理解Java變數賦值
- ES6:變數的解構賦值變數賦值
- ES6:變數的結構賦值變數賦值
- ES6 變數的解構賦值變數賦值
- ECMAScript6變數的解構賦值變數賦值
- Mybatis出現成員賦值都是null或者預設值MyBatis賦值Null
- JavaScript 等號 = 賦值運算子JavaScript賦值