# js執行環境 每當函式執行時會生成一個環境,可看作一個泡泡 函式執行結束後,泡泡會跟著消失,意旨執行環境會消失 最外層的泡泡就會有一個全域物件-->window node.js稱之為global 最外層宣告一個var a時,他實際是綁在window,因此 ```javascript= var a = 1; console.log(a = window.a); ``` 這邊會回傳一個布林值=>true # call Stack 若在涵式內呼叫"自己"時,會發生一件事情=>遞迴(歸), 他就會一直產生一個stack一直往上疊,若沒有控制好爆了,就會發生堆疊溢位(Stack Overflow) (...怎麼這名詞這麼熟悉,~~求救網站~~) run time(執行環境)有一些非同步的配套,解決單執行續的問題 例如ajax call api,若是回傳的資料量過大整個城市就會卡在那邊像d是當機一樣 ```javascript= console.log(1); setTimeout(function () { console.log(2); }, 3000) console.log(3); ``` 執行結果 1 => 3 => 2 (js本身沒有計時器,js本身只提供一個入口交給瀏覽器or nodejs裡面去做) 所以setTimeout這個函式入口很快就執行完了,讀秒的事件則是放到後面 等於我們的函式都會先放到stack上執行,執行完後才會執行Event Queue 讀秒這件事情會放到事件柱列(Event Queue)執行 ```javascript= console.log('我就只是一段中文字'); setTimeout(function () { console.log('讓我執行啦QQ'); }, 0); while (true) { // 我不做完你別想執行喔setTimeout } ``` 上方的程式碼因為js機制的關係,若是你堆疊的事件沒有執行完,永遠不會輪到Event Queue執行 物件導向 js本質上並沒有類別(what are u...) 他是使用protortype來設計物件導向 這邊做個淺淺的紀錄 ```javascript= function heroCreater(name, action) { //待實作 } const allmight = new hreoCreater('歐爾麥特', '美國扣殺'); ``` # 探討new做了什麼事情 前導觀念: (1)js裡面所有的物件都有_proto_屬性 想要執行某個物件的方法時會順著_proto_找,物件本身沒有這個方法時,不會馬上爆炸 他會順著_proto_一路往它的末端去找-->稱之為原型鍊(Prototype Chain) (真的找不到時還是會爆炸,就噴error 例如未定義之類的) (2)js內函數本身也是個物件,每個函數(function)都含有prototype屬性 **註:prototype屬性和_proto_屬性不同喔!不要搞混了** * 在泡泡內建立了一個空的物件 * 把這個空物件的_proto_屬性指向hreoCreater函數的prototype屬性 * 把泡泡裡的this指向這個剛建立的新物件 可以看到這個new做了蠻多的事情 20:20
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up