搜尋
首頁web前端js教程實例詳解JavaScript中立即執行函數

實例詳解JavaScript中立即執行函數

Dec 28, 2017 am 09:38 AM
javascriptjs執行

js立即執行函數可以讓你的函數在創建後立即執行,js立即執行函數模式是一種語法,可以讓你的函數在定義後立即被執行,這種模式本質上就是函數表達式(命名的或匿名的),在創建後立即執行。 javascript和其他程式語言相比比較隨意,所以javascript程式碼充滿各種奇葩的寫法,有時霧裡看花,當然,能理解各型各色的寫法也是對javascript語言特性更進一步的深入理解。這篇文章主要為大家介紹了關於JavaScript中立即執行函數的相關資料,需要的朋友可以參考下。

前言

( function(){…} )()和( function (){…} () )是兩個javascript立即執行函數的常見寫法,最初我以為是一個括號包裹匿名函數,再在後面加個括號呼叫函數,最後達到函數定義後立即執行的目的,後來發現加括號的原因並非如此。

下面話不多說了,來一起看看詳細的介紹吧。

通常我們聲明一個函數有以下幾種方式:

// 声明函数f1
function f1() {
 console.log("f1");
}
// 通过()来调用此函数
f1();


//一个匿名函数的函数表达式,被赋值给变量f2:
var f2 = function() {
 console.log("f2");
}
//通过()来调用此函数
f2();


//一个命名为f3的函数的函数表达式(这里的函数名可以随意命名,可以不必和变量f3重名),被赋值给变量f3:
var f3 = function f3() {
 console.log("f3");
}
//通过()来调用此函数
f3();

如果你看過一些自訂控制項的話你會發現他們大多都是沿用這種寫法:

(function() {
 "
 // 这里开始写功能需求
 })();

這是我們常說的立即執行函數(IIFE),顧名思義,也就是說這個函數是立即執行函數體的,不需要你額外去主動的去調用,一般情況下我們只對匿名函數使用IIFE ,這麼做有兩個目的:

     一是不必為函數命名,避免了污染全域變數

     二是IIFE內部形成了一個單獨的作用域,可以封裝一些外部無法讀取的私有變數。

如果看到這兩句話無法理解,那麼先從IIFE的運作原理說起。

因為IIFE通常用於匿名函數,這裡就用簡單的匿名函數作為栗子:

var f = function(){
 console.log("f");
}
f();

我們發現這裡f只是這個匿名函數的一個引用變量,那麼既然f ()能夠呼叫這個函數,我把f替換成函數本身可以麼:

function(){
 console.log("f"); 
}();

運行之後得到如下結果:

Uncaught SyntaxError: Unexpected token (

產生這個錯誤的原因是,Javascript引擎看到function關鍵字之後,認為後面跟的是函數宣告語句,不應該以圓括號結尾。解決方法就是讓引擎知道,圓括號前面的部分不是函數定義語句,而是一個表達式,可以對此進行運算,這裡區分一下函數宣告和函數表達式:

1、函數宣告(即我們通常使用function x(){}來宣告一個函數)

function myFunction () { /* logic here */ }

2、函數表達式(類似以這種的形式)

var myFunction = function () { /* logic here */ };
var myObj = {
 myFunction: function () { /* logic here */ }
};

小學我們就學過用()括起來的表達式會先執行,就像下面這樣:

1+(2+3) //这里先运行小括号里面的内容没有意见撒

其實在javascript中小括號也有相似的作用,Javascript引擎看到function關鍵字會認為是函數宣告語句,那如果Javascript引擎優先看到小括號會怎麼樣:

//用小括号把函数包裹起来
(function(){
  console.log("f");  
})();

函數成功執行了:

f //控制台输出

這種情況下Javascript引擎就會認為這是一個表達式,而不是函數聲明,當然要讓Javascript引擎認為這是一個表達式的方法還有很多:

!function(){}();
+function(){}();
-function(){}();
~function(){}();
new function(){ /* code */ }
new function(){ /* code */ }() // 只有传递参数时,才需要最后那个圆括号。
……

回到前面的問題,為什麼說IIFE這種形式避免了污染全局變量,如果你見過別人寫的jquery插件,裡面通常會有類似這樣的程式碼:

(function($){
  "
  //插件实现代码
})(jQuery);

這裡的jquery其實是該匿名函數的參數,聯想一下我們呼叫匿名函數時候是用f()那麼匿名帶參數的就是f (args)對吧,這裡把jquery當作參數傳入該函數,那麼在函數內部使用形參$的時候就不會影響到外部環境,因為有些插件也會用到$這個限定符,你在這個函數內部可以隨意折騰。

以上,過程中參考了以下兩篇文章:

javascript立即執行某個函數:插件中function(){}()再思考

JavaScript中的立即執行函數

相關推薦:

分析function前加運算子實現立即執行函數

##################################################################################### #JavaScript匿名、具名函數與立即執行函數IIFE詳解############JS中的立即執行函數#######

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

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架:為現代網絡開發提供動力JavaScript框架:為現代網絡開發提供動力May 02, 2025 am 12:04 AM

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

JavaScript,C和瀏覽器之間的關係JavaScript,C和瀏覽器之間的關係May 01, 2025 am 12:06 AM

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

node.js流帶打字稿node.js流帶打字稿Apr 30, 2025 am 08:22 AM

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python vs. JavaScript:性能和效率注意事項Python vs. JavaScript:性能和效率注意事項Apr 30, 2025 am 12:08 AM

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript的起源:探索其實施語言JavaScript的起源:探索其實施語言Apr 29, 2025 am 12:51 AM

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

幕後:什麼語言能力JavaScript?幕後:什麼語言能力JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。