通過建構式創建了一個 counter 物件:
function Counter() {
let count = 0; //沒有this
this.up = function() {
return ++count;
};
this.down = function() {
return --count;
};
}
let counter = new Counter();
counter.up() //1,為什么這里還能得到count的值?
我的理解是,counter物件有up和down兩個方法,但是應該沒有獲得count這個屬性,類似這樣:
counter={
up(){
return ++count;
},
down(){
return --count;
}
}
怎么還能獲取到count的值呢?
uj5u.com熱心網友回復:
let count = 0; 定義了區域變數 還不讓人用嗎 跟屬性有啥關系uj5u.com熱心網友回復:
這區域變數不應該只作用于函式Counter里嗎?
建構式Counter里的let count = 0沒帶this,是不是新創建的物件counter就沒有count這個屬性?那物件方法counter.up()運行的時候怎么會找到函式代碼塊里的區域變數呢?
uj5u.com熱心網友回復:
推薦個大神寫的專題吧JavaScript深入之詞法作用域和動態作用域
JavaScript深入之執行背景關系堆疊
uj5u.com熱心網友回復:
如果自身的作用域中沒有該變數,JS 會使用 LSH查詢 向父級查詢是否存在該變數,如果沒有,還會繼續向上查詢,直到全域作用域為止轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/269895.html
標籤:JavaScript
