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賦值物件陣列變數
- JavaScript 同時宣告多個變數並賦值JavaScript變數賦值
- 變數的解構賦值變數賦值
- shell 變數賦值問題變數賦值
- shell變數命名與賦值變數賦值
- 複製物件重新賦值不改變原物件物件賦值
- JavaScript 連等賦值JavaScript賦值
- 物件屬性值賦給變數物件變數
- JavaScript函式引數解構賦值JavaScript函式賦值
- JavaScript 物件解構賦值JavaScript物件賦值
- JavaScript 字串解構賦值JavaScript字串賦值
- c#小灶——常量、變數和賦值C#變數賦值
- AC-DMIS 5.3 V變數賦值變數賦值
- Mybatis出現成員賦值都是null或者預設值MyBatis賦值Null
- JavaScript 等號 = 賦值運算子JavaScript賦值
- JavaScript陣列解構賦值JavaScript陣列賦值
- JavaScript解構賦值的用途JavaScript賦值
- 列表切片賦值給另一個變數賦值變數
- JS中的變數賦值深入理解JS變數賦值
- 自己對Java中if變數賦值的理解Java變數賦值
- go語言變數的宣告與賦值Go變數賦值
- ES6:變數的結構賦值變數賦值
- vue 變數賦值同時改變的問題Vue變數賦值
- Verilog連續賦值、過程賦值、過程連續賦值總結賦值
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- 淺談Python變數賦值的三種方法!Python變數賦值
- ECMAScript 6入門 - 變數的解構賦值變數賦值
- matlab中怎麼給符號變數賦值Matlab符號變數賦值
- ES6 - 變數的解構賦值解析變數賦值
- ES6之變數的解構賦值變數賦值
- 常被新手忽略的值賦值和引用賦值(偏redux向)賦值Redux
- 2020.11.20 setInterval函式的注意事項 ES6-8學習(let const 解構賦值)函式賦值
- 深入ES6 三 變數的解構賦值變數賦值
- 關於變數與‘=’賦值的情況出錯變數賦值
- ES6 -- 變數的解構賦值的用途變數賦值
- 解構賦值賦值