js 中斷函式執行 JS 函式的執行時機

2021-10-14 05:01:35 字數 1673 閱讀 6729

js函式的執行時機和函式被呼叫的時機有關,函式被呼叫時才會被執行,呼叫時機不同,函式的執行結果也不同。

先通過幾個例子來理解這句話:

例一

let a = 1

function fn()

結果:a不會被列印,因為沒有呼叫函式,函式未被執行。

例二

let a = 1

function fn()

fn()

// 1

結果:此時會列印出1,首先前面宣告了a=1,然後呼叫fn(),即列印出1。

例三

let a = 1 

function fn()

a = 2

fn()

結果:a被列印為2, 可以通過函式宣告的位置確認,函式裡的變數a是離函式最近的let宣告的變數a,但在函式被呼叫前a被賦值為2。

例四

let a = 1

function fn()

fn()

a = 2

// 1

結果:a被列印為1, 可以通過函式宣告的位置確認,函式裡的變數a是離函式最近的let宣告的變數a,並且在函式呼叫前a的值未被改變。

例五

let a = 1

function fn(),0)

}fn()

a = 2

// 2

這裡新增了settimeout函式,這個函式會放在非同步佇列中執行(也就是同步任務執行完畢後才會執行非同步任務),在這道題裡面就是會先執行a=2,然後在執行settimeout,因此列印列印結果為2。

例六

let i = 0

for(i = 0; i<6; i++),0)

}//不是 0、1、2、3、4、5

//而是 6 個 6

for迴圈在主線程內,settimeout是非同步方法,在任務佇列裡面,只有主線程執行完後,任務佇列才執行,當for執行結束時候,此時的i值已經是6,所以得到結果是個6。

如何列印出0,1,2,3,4,5呢?

方法一

for(let i = 0; i<6; i++),0)

}// 0、1、2、3、4、5

和例6相比,使用let在for迴圈語句的圓括號之內宣告賦值,在圓括號之間會有乙個隱藏的作用域,並且在每次執行迴圈體之前,js 引擎會把 i 在迴圈體的上下文中重新宣告及初始化一次。

參考:

方應杭:我用了兩個月的時間才理解 let​zhuanlan.zhihu.com

方法二

for (var i = 0; i <6;i++))

}(i)

}

使用立即執行函式在for迴圈體內宣告乙個區域性變數,然後立即執行,也可以像let一樣每次迴圈都得到不同的i。

js 中斷函式執行 js如何中斷遞迴函式

如題,功能是為了生成乙個多級陣列內的某個id及他的父元素的id陣列,但是在查詢完畢以後retrun出生成的陣列結果,依然還執行了剩下的迴圈,請問要如何中斷並跳出呢 initarr id,type list arr const getclassify list,id else else if end ...

js 中斷函式執行 js如何中斷遞迴函式

如題,功能是為了生成乙個多級陣列內的某個id及他的父元素的id陣列,但是在查詢完畢以後retrun出生成的陣列結果,依然還執行了剩下的迴圈,請問要如何中斷並跳出呢 initarr id,type list arr const getclassify list,id else else if end ...

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

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