溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中立即執行函數格式有哪些

發布時間:2021-11-12 17:31:56 來源:億速云 閱讀:176 作者:小新 欄目:開發技術

這篇文章主要介紹JavaScript中立即執行函數格式有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

在JavaScript中有時候看到一些很神奇的函數比如下面截圖:

JavaScript中立即執行函數格式有哪些

這種函數只要瀏覽器加載的時候會自動運行,而需要調用,前面在閉包的時候也說過這種函數,一般將其稱之為:立即執行函數。

立即函數的特征:

  • 會自動執行

  • 只會執行一次

立即執行函數格式

立即執行函數一般有格式如下:

# 格式一(//W3C 推薦這種寫法)
(function (){
 }())
 
#格式二 (但是這個才是最常用的方式之一)
(function (){
 })();

其實上面還可以看出立即執行函數,一般都不會寫函數名字,其意義不大,畢竟立即函數不必通過函數名進行調用了,這個和字面量定義函數的時候作用差不多。

現在結合閉包和立即執行函數相互結合來一個例子:

var fun=(
function(){
  function test(a,b){
      console.log(a+b);
  }    
  return test;
}
)()

JavaScript中立即執行函數格式有哪些

立即執行函數其他方式–表達式

上面的立即執行函數的格式定義,但是還有其他方式實現這個功能,比如下面這個就不是上面的格式

!function(){
    console.log("test");
}()

JavaScript中立即執行函數格式有哪些

看出其輸出的兩行,第一個是test,也就是有種立即執行函數的結果,而true被輸出是是因為前面多了!,這個在隱式轉換的時候說過,在!后面的都會強制換行布爾類型。

現在又有一個疑問了,為什么這種方式可以實現呢?

分析這種情況的產生,首先來一個表達式函數:

var test=function(){
    console.log("test表達式")
}
#這樣聲明后,如何使用呢?如下
test();

JavaScript中立即執行函數格式有哪些

這個時候就有一個大膽的想法了,賦值的函數,通過變量值+()就可以執行,那為什么不能直接寫好。

var test=function(){
    console.log("test表達式")
}()

JavaScript中立即執行函數格式有哪些

這地方可以看出 表達式函數也有了一種立即執行的效果。

(補充:為什么都有undefined,因為這個函數本身就沒有return 值,所以會有undefined這個值在瀏覽器console面板輸出了undefined)

那直接在函數后面放括號可以嗎?

function(){
    console.log("test表達式")
}()

JavaScript中立即執行函數格式有哪些

可以看出需要用表達式前提才可以在后面放(),不然會報錯。

這個時候就有了一個大膽的想法,其實!后面方法,其實將函數轉換成立表達式函數,所以后面可以+()可以直接運行了。那就有了大膽的想法,既然如此那直接在函數前加一個加號(+)試試。

+function(){
    console.log("test表達式")
}()

JavaScript中立即執行函數格式有哪些

既然加號可以那么:

+-
!~

當然所謂的乘號和除號是無法實現的,還有一個神奇的關鍵字也可以有這個神奇的效果,那就是new 和 void

new function(){
    console.log("test表達式")
}()

JavaScript中立即執行函數格式有哪些

還有一個那就是量邏輯運算符號 || 和&& 也可以實現

不過這個需要根據其特征再前面需要加真或者假才可以,單獨使用是不可以的

1 && function(){
    console.log("test表達式")
}()
 或者
0 || function(){
    console.log("test表達式")
}()

JavaScript中立即執行函數格式有哪些

還有一個神奇的符號(逗號)也可以實現這個功能:

1,function(){
    console.log("test表達式")
}()

JavaScript中立即執行函數格式有哪些

可以看出如果使用逗號,無論前面真假都會執行后面的表達式函數。

立即執行函數可以帶參數

立即執行函數也可以有參數的,具體如下

(function(a,b){
    console.log(a,b)
})(1,2)

JavaScript中立即執行函數格式有哪些

應用

這個題是很經典的面試題,首先創建下一個html

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>test</title> 
</head>
<body>
<ul id=”test”>
    <li>這是第一條</li>
     <li>這是第二條</li>
    <li>這是第三條</li>
 </ul>
<script>
  var liList=document.getElementsByTagName('li');
     for(var i=0;i<liList.length;i++)
     {
         liList[i].onclick=function(){
             console.log(i);
         }
     };
</script>
 </body>
</html>

目的是點擊第幾個標簽li 輸出幾,但是結果

JavaScript中立即執行函數格式有哪些

因為在點擊li的時候for循環早已循環完畢了,這個可以用前面所學的let,關鍵字也可以解決

  var liList=document.getElementsByTagName('li');
     for(let i=0;i<liList.length;i++)
     {
         liList[i].οnclick=function(){
             console.log(i);
         }
     };

JavaScript中立即執行函數格式有哪些

這個可以解決這個問題,但是沒有用到立即運行函數,當然也可以通過立即執行函數進行修改

 var liList=document.getElementsByTagName('li');
     for(let i=0;i<liList.length;i++)
     {  (function(a){
        liList[a].οnclick=function(){
             console.log(a);
         } 
      })(i)
      };

JavaScript中立即執行函數格式有哪些

可以看出立即執行函數會形成一個自己的封閉空間,其不會被外部的其他變量影響,其實這個如果再有一個return的話就是一個標準的閉包了。

以上是“JavaScript中立即執行函數格式有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女