區別function
Iife最左邊為(。編譯器認為是iife,不是函數。
IIFE的目的是為了隔離作用域,防止污染全局命名空間
彌補scope的缺陷 用于隔離作用域
全局作用域 塊級作用域 函數作用域
只有function才能實現作用域隔離,因此如果要將一段代碼中的變量、函數等的定義隔離出來,只能將這段代碼封裝到一個函數中。
將代碼封裝到函數中的目的是為了復用。在JS中,當然聲明函數的目的在大多數情況下也是為了復用,但是JS迫于作用域控制手段的貧乏,我們也經??吹街皇褂靡淮蔚暮瘮担哼@通常的目的是為了隔離作用域了!既然只使用一次,那么立即執行好了!
IIFE構造單例模式
JS的模塊就是函數,最常見的模塊定義如下:
functionmyModule(){
varsomeThing="123";
varotherThing=[1,2,3];
functiondoSomeThing(){
console.log(someThing);
}
functiondoOtherThing(){
console.log(otherThing);
}
return{
doSomeThing:doSomeThing, doOtherThing:doOtherThing
}
}
varfoo=myModule();
foo.doSomeThing();
foo.doOtherThing();
varfoo1=myModule();
foo1.doSomeThing();
如果需要一個單例模式的模塊,那么可以利用IIFE:
var myModule=(functionmodule(){
varsomeThing="123";
varotherThing=[1,2,3];
functiondoSomeThing(){
console.log(someThing);
}
functiondoOtherThing(){
console.log(otherThing);
}
return{
doSomeThing:doSomeThing, doOtherThing:doOtherThing
}
})();
myModule.doSomeThing();
myModule.doOtherThing()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/115001.html
摘要:將匿名函數賦予一個變量,叫函數表達式,這是最常見的函數表達式語法形式。組成這是一個被稱為自執行匿名函數的設計模式,主要包含兩部分。 一、函數聲明&函數表達式 1.1 函數聲明 (函數語句) showImg(https://segmentfault.com/img/bVbbqvT?w=278&h=166); (1)使用 function 關鍵字聲明一個函數,再指定一個函數名,叫函數聲明。...
摘要:所以那些匿名函數附近使用括號或一些一元運算符的慣用法,就是來引導解析器,指明運算符附近是一個表達式。 Immediately-invoked Function Expression(IIFE,立即調用函數),簡單的理解就是定義完成函數之后立即執行。因此有時候也會被稱為自執行的匿名函數(self-executing anonymous function)。 IIFE的叫法最早見于Ben...
區別functionIife最左邊為(。編譯器認為是iife,不是函數。 IIFE的目的是為了隔離作用域,防止污染全局命名空間 彌補scope的缺陷 用于隔離作用域全局作用域 塊級作用域 函數作用域只有function才能實現作用域隔離,因此如果要將一段代碼中的變量、函數等的定義隔離出來,只能將這段代碼封裝到一個函數中。 將代碼封裝到函數中的目的是為了復用。在JS中,當然聲明函數的目的在大多數情況...
摘要:另外,如果你想跳過這里,你可以直接跳到立即調用函數表達式進行閱讀,但是我建議你讀完整篇文章。當圓括號包裹函數時,它會默認將函數作為表達式去解析,而不是函數聲明。 原文:Immediately-Invoked Function Expression (IIFE) by Ben Alman原譯:立即執行函數 by Murphywuwu改增內容: by blanu 也許你沒有注意到,我是一個...
閱讀 1849·2023-04-26 01:58
閱讀 1982·2019-08-30 11:26
閱讀 2729·2019-08-29 12:51
閱讀 3495·2019-08-29 11:11
閱讀 1182·2019-08-26 11:54
閱讀 2095·2019-08-26 11:48
閱讀 3478·2019-08-26 10:23
閱讀 2384·2019-08-23 18:30