目錄
透過一個實例來解釋:
案例1:
解釋:
首頁 web前端 js教程 js匿名自執行函數實例詳解

js匿名自執行函數實例詳解

Mar 19, 2018 pm 05:28 PM
javascript 實例 詳解

匿名自執行函數:沒有方法名稱的函數,閉包:閉包是指有權存取另一個函數作用域變數的函數;本文主要和大家分享js匿名自執行函數實例詳解,希望能幫助到大家。

透過一個實例來解釋:

從網路上找到了一個案例,使用了for迴圈、匿名自執行函數、setTimeout。

案例1:
var value1 =0,value2=0,value3=0;for(var i =1;i<=2;i++){  var i2 = i;  console.log(&#39;i2==>&#39;,i2);
  (function(){    var i3 = i;    console.log(&#39;i3==>&#39;,i3);
    setTimeout(function(){      console.log(&#39;i==>&#39;,i);      console.log(&#39;i2==>&#39;,i2);      console.log(&#39;i3==>&#39;,i3);
      value1 +=i;
      value2 +=i2;
      value3 +=i3;
    },1);
  })();
}

setTimeout(function(){  console.log(value1,value2,value3);
},100)
登入後複製
//输出结果i2==> 1i3==> 1i2==> 2i3==> 2i==> 3i2==> 2i3==> 1i==> 3i2==> 2i3==> 26 4 3
登入後複製

解釋:

##1.匿名自執行函數的幾個語法
(function () { /* code */ } ()); // 推荐(function () { /* code */ })(); 
~function () { /* code */ }(); 
+function () { /* code */ }(); 
!function () { /* code */ }(); 
void function () { /* code */ }();
登入後複製
2.利用自執行函數和閉包來保存某個特殊狀態中的值
(function(){//自执行函数
    var i3 = i;    console.log(&#39;i3==>&#39;,i3);
    setTimeout(function(){//闭包
      console.log(&#39;i==>&#39;,i);      console.log(&#39;i2==>&#39;,i2);      console.log(&#39;i3==>&#39;,i3);
      value1 +=i;
      value2 +=i2;
      value3 +=i3;
    },1);
  })();
登入後複製
自執行函數中的變數會在閉包中調用,根據閉包的特性會將for循環時每次循環的不同值傳入閉包;

3.for迴圈語法理解
for (语句 1; 语句 2; 语句 3) {
 ...
}
登入後複製
語句1 在迴圈(程式碼區塊)開始前執行

語句2 定義執行迴圈(程式碼區塊)的條件
語句3 在迴圈(程式碼區塊)已被執行之後執行

透過下面案例進行解析:

for(var i=1;i<3;i++){  console.log(i);
  setTimeout(function(){    console.log(&#39;i===>&#39;,i);
  },100);
}//输出12i===> 3i===> 3
登入後複製
for迴圈的時候,i++會在for語句中程式碼結束後執行,而setTimeout是異步執行的,因此在setTimeout中輸出的i實際上是最後一次循環結束後,i再次++後的值。

解釋案例1:
看到這裡大家應該明白了,案例一中,第一次循環時,i2 = 1,自執行函數中i3=1,但是閉包可以保存不同狀態的值,因此,此時傳給setTimeout的值只有i3被保存在緩存中,i2,i都將被第二次的循環覆蓋,此時setTimeout並沒有執行;

當第二次循環時,i2=2;i3=2;同樣,i3=2也被保存在閉包中,i2被覆蓋;
此時for循環執行結束,開始執行setTimeout函數,這個時候,for循環結束了,並且執行了最後一個語句「i++」,因此,此時為3,並非2;而閉包外面的i2並沒有將不同的狀態保存在閉包中,只能被覆蓋,而閉包中的i3每次的值都會被閉包緩存在記憶體中,將狀態保留下來,因此setTimeout中的都為3,i2都為2,而i3則是每次循環的值;

文末福利:

福利一:前端,Java,產品經理,微信小程序,Python等資源合集大放異彩:https://www.jianshu.com/p/e8197d4d9880

福利二:微信小程式入門與實戰全套詳細影片教學:https://www.jianshu.com/p/e8197d4d9880





相關推薦:


#詳解JavaScript自執行函數與jQuery擴充方法

JavaScript自執行函數與jQuery擴充方法

js函數中的自執行函數

以上是js匿名自執行函數實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Win11管理員權限取得詳解 Win11管理員權限取得詳解 Mar 08, 2024 pm 03:06 PM

Win11管理員權限取得詳解

Oracle SQL中的除法運算詳解 Oracle SQL中的除法運算詳解 Mar 10, 2024 am 09:51 AM

Oracle SQL中的除法運算詳解

PHP模運算子的作用及用法詳解 PHP模運算子的作用及用法詳解 Mar 19, 2024 pm 04:33 PM

PHP模運算子的作用及用法詳解

linux系統呼叫system()函數詳解 linux系統呼叫system()函數詳解 Feb 22, 2024 pm 08:21 PM

linux系統呼叫system()函數詳解

詳細解析C語言學習路線 詳細解析C語言學習路線 Feb 18, 2024 am 10:38 AM

詳細解析C語言學習路線

Linux的curl指令詳解 Linux的curl指令詳解 Feb 21, 2024 pm 10:33 PM

Linux的curl指令詳解

深入了解Promise.resolve() 深入了解Promise.resolve() Feb 18, 2024 pm 07:13 PM

深入了解Promise.resolve()

numpy版本查詢方法詳解 numpy版本查詢方法詳解 Jan 19, 2024 am 08:20 AM

numpy版本查詢方法詳解

See all articles