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

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

Dec 09, 2017 pm 01:39 PM
javascript js 實例

javascript和其他程式語言比較比較隨意,所以javascript程式碼充滿各種奇葩的寫法,有時霧裡看花,當然,能理解各型各色的寫法也是對javascript語言特性更進一步的深入理解。本文主要為大家介紹了JavaScript中立即執行函數的相關資料,希望能幫助大家。

前言

js立即執行函數可以讓你的函數在建立後立即執行,js立即執行函數模式是一種語法,可以讓你的函數在定義後立即被執行,這種模式本質上就是函數表達式(命名的或匿名的),在創建後立即執行。

( 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當作參數傳入該函數,那麼在函數內部使用形參$的時候就不會影響到外部環境,因為有些插件也會用到$這個限定符,你在這個函數內部可以隨意折騰。

相關推薦:


JS中的立即執行函數

#JavaScript立即執行函數的三種不同寫法_javascript技巧

JavaScript中的立即執行函數表達式介紹_javascript技巧

以上是JavaScript中立即執行函數實例詳解的詳細內容。更多資訊請關注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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 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)

建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 Dec 17, 2023 pm 06:55 PM

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟,需要具體程式碼範例隨著網路和科技的快速發展,股票交易已成為許多投資者的重要途徑之一。而股票分析是投資人決策的重要一環,其中蠟燭圖被廣泛應用於技術分析。學習如何使用PHP和JS繪製蠟燭圖將為投資者提供更多直觀的信息,幫助他們更好地做出決策。蠟燭圖是一種以蠟燭形狀來展示股票價格的技術圖表。它展示了股票價格的

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

js和vue的關係 js和vue的關係 Mar 11, 2024 pm 05:21 PM

js和vue的關係:1、JS作為Web開發基石;2、Vue.js作為前端框架的崛起;3、JS與Vue的互補關係;4、JS與Vue的實踐應用。

學習Golang指標轉換的最佳實務範例 學習Golang指標轉換的最佳實務範例 Feb 24, 2024 pm 03:51 PM

Golang是一門功能強大且高效的程式語言,可用於開發各種應用程式和服務。在Golang中,指標是一種非常重要的概念,它可以幫助我們更靈活和有效率地操作資料。指標轉換是指在不同類型之間進行指標操作的過程,本文將透過具體的實例來學習Golang中指標轉換的最佳實踐。 1.基本概念在Golang中,每個變數都有一個位址,位址就是變數在記憶體中的位置。

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務

See all articles