(function(){})()
關(guān)鍵詞: 立即執(zhí)行函數(shù) 匿名函數(shù) 作用域
專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)張掖免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
格式: (function())()
作用: 立即執(zhí)行函數(shù)(function())()
是匿名函數(shù), 主要利用函數(shù)的作用域, 減少全局變量的使用
js中的函數(shù)通常有兩種命名方式,分別是 聲明式函數(shù) 和 函數(shù)表達(dá)式
// 聲明式函數(shù)
function func() {}
// 函數(shù)表達(dá)式
const func = function() {}
當(dāng)我們的有些簡(jiǎn)單函數(shù)只執(zhí)行一次的時(shí)候,我們通常會(huì)這么做
// 聲明式函數(shù)
function func () {console.log('I am a cat')}
func() // I am a cat
// 表達(dá)式函數(shù)
const func = function () {console.log('I am a cat')} // 方法1
func() // I am a cat
const func = function () {console.log('I am a cat')} () // 方法2
func // I am a cat
這時(shí)候我們會(huì)注意到函數(shù)的調(diào)用都要用到函數(shù)名, 那么如果我們不想要這個(gè)函數(shù)名呢?
可以發(fā)現(xiàn)函數(shù)表達(dá)式 方法2 中在函數(shù)聲明的時(shí)候直接將函數(shù)結(jié)果返回給了變量 func, 并且在調(diào)用變量 func 的時(shí)候成功返回結(jié)果.
那么是否可以這樣理解, 直接使用function () {console.log('I am a cat')}
就可以實(shí)現(xiàn)我們的目的?
function () { console.log('I am a cat')} () // Function statements require a function name
失敗了? 函數(shù)需要一個(gè)函數(shù)名!
這是因?yàn)楫?dāng)我們直接使用function () {console.log('I am a cat')}
的時(shí)候, js解釋器會(huì)認(rèn)為我們的函數(shù)是一個(gè)聲明式函數(shù), 而非表達(dá)式函數(shù). 因此必須使用一些特殊手段,讓js解釋器認(rèn)出我們應(yīng)該是函數(shù)表達(dá)式. 這樣的方法有很多,最常見的莫過于以下寫法. 這也是我最推薦的寫法
(function () {console.log('I am a cat')}) () // I am a cat
// 知道即可,防止遇見了不認(rèn)識(shí)
!function () {}();
~function () {}();
-function () {}();
+function () {}();
void function () {}();
(function () {}());
(function () {})();
// ES6 箭頭函數(shù)
(()=>{})()