Js函數(shù)調(diào)用的方式有如下幾種情況:
(1)具名函數(shù)直接調(diào)用
(2)匿名函數(shù)通過引用來調(diào)用
(3)沒有引用的匿名函數(shù)調(diào)用1
(4)沒有引用的匿名函數(shù)調(diào)用2
(5)沒有引用的匿名函數(shù)調(diào)用3

圖1.1,圖1.2表明了這兩種表達式的運算過程是不一樣的,圖1.1中是用強制運算符使函數(shù)調(diào)用運算得以執(zhí)行,圖1.2中則用強制運算符運算"函數(shù)直接量聲明"這個表達式,并返回一個函數(shù)自身的引用,然后通過函數(shù)調(diào)用運算"()"來操作這個函數(shù)引用。而上面的最后一個匿名函數(shù)調(diào)用void function(){}();則用于調(diào)用函數(shù)并忽略返回值,運算符void用于使其后面的函數(shù)表達式執(zhí)行運算。如果我們不使用"void"與強制運算"()",代碼能否執(zhí)行:
(1)function(){}() //使用''()"強制調(diào)用
(2)function(){}(); //使用";"來執(zhí)行語句
腳本引擎會認為function(){}是函數(shù)聲明,從而通不過語法檢測,代碼被解析成這樣:
function(){};();
function(){}被作為聲明被解釋,而"();"被獨立成一行來解釋,因而會報語法錯誤,為什么知道是"();"導致的錯誤?我們改成如下代碼:
function(){}(1);
這樣就會被引擎解釋為:
fucntion(){};
(1); //單值表達式
因而通過了語法檢測...
新聞熱點
疑難解答