js函數調用的方式

來源:互聯網
上載者:User

Js函數調用的方式有如下幾種情況:

(1)具名函數直接調用
複製代碼 代碼如下:
function foo()
  {
  }
  foo();

(2)匿名函數通過引用來調用
複製代碼 代碼如下:
  fooRef = function()
  {
  }
fooRef();

(3)沒有引用的匿名函數調用1
複製代碼 代碼如下:
(function()
 {
}());

(4)沒有引用的匿名函數調用2
複製代碼 代碼如下:
 (function()
 {
 })();
 

 (5)沒有引用的匿名函數調用3
 複製代碼 代碼如下:
 void function()
 {

 }();


圖1.1,圖1.2表明了這兩種運算式的運算過程是不一樣的,圖1.1中是用強制運算子使函數調用運算得以執行,圖1.2中則用強制運算子運算"函數直接量聲明"這個運算式,並返回一個函數自身的引用,然後通過函數調用運算"()"來操作這個函數引用。而上面的最後一個匿名函數調用void function(){}();則用於調用函數並忽略傳回值,運算子void用於使其後面的函數運算式執行運算。如果我們不使用"void"與強制運算"()",代碼能否執行:

(1)function(){}()  //使用''()"強制調用

(2)function(){}();  //使用";"來執行語句

指令碼引擎會認為function(){}是函式宣告,從而通不過文法檢測,代碼被解析成這樣:

function(){};();

function(){}被作為聲明被解釋,而"();"被獨立成一行來解釋,因而會報語法錯誤,為什麼知道是"();"導致的錯誤?我們改成如下代碼:

function(){}(1);

這樣就會被引擎解釋為:

fucntion(){};

(1);  //單值運算式

因而通過了文法檢測...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.