js函式的執行環境

2022-02-24 01:13:39 字數 746 閱讀 8684

js的函式本質上是一種物件,是物件就會有自己的環境(作用域),看下面的例子

var var1 =

};var var2 =;

var2.getmessage();

這段**會輸出 "var2"。不對啊,應該是輸出"var1"啊,但是這裡確實應該輸出"var2",不信你自己實驗。

這就是函式體中的this在起作用,var2的函式getmessage指向的是var1的函式,而函式其實就是一段放在記憶體中的**,執行var1.getmessage()時,this指向的就是var1,輸出也就是「var1」了。執行var2.getmessage()時自然就輸出"var2"了。如果改成是下面這樣

var var1 =

};var var2 =

};var2.getmessage();

輸出就會是"var1"了。看出兩段**有什麼區別了嗎?區別就在第二段**給var2重新指定了乙個函式,只不過這個新函式中執行了var1的函式。

this指向的就是函式的執行環境,在第一段**中,其實就是把var1的函式的**複製給了var2的函式,所以var2的函式在記憶體中編譯後(瀏覽器解釋js**時就會把**編譯成機器碼放在記憶體中)的**是這樣的:alert(this.message),this指向的是var2,所以會輸出"var2"。第二段**中,var2的函式沒有自己的**,它只是定義了乙個指標指向了var1的函式**,所以執行的其實就是var1的函式**,this自然指向的就是var1的執行環境了。

js執行環境相關

js執行過程如果乙個文件中存在多個 段 步驟一 讀入第乙個 段 js引擎並非一行一行執行,而是一段一段分析執行 步驟二 做詞法分析和語法分析,有錯則報語法錯誤 比如括號不匹配等 並跳轉到步驟5 步驟三 對 var 變數和 function 定義做 預解析 永遠不會報錯的,因為只解析正確的宣告 步驟四...

js立即執行函式 JS 函式的執行時機

首先我們介紹一下window.settimeout這個方法,該方法設定乙個定時器,該定時器在定時器到期後執行乙個函式或指定的一段 其語法如下 settimeoutfunction是在到期時間 delay毫秒 之後執行的函式。delay是延遲的毫秒數 一秒等於1000毫秒 函式的呼叫會在該延遲之後發生...

js立即執行函式 《JS 函式的執行時機》

一 當執行下面 時,輸出的是6個6 let 原因 settimeout函式會等當前 執行完後,再執行。從該 中,settimeout會等for迴圈結束後執行,因為for迴圈結束後,i為6,且settimeout被呼叫6次,所以最終輸出6個6 二 將上面 輸出為0 1 2 3 4 5 js用let就能...