自執(zhí)行函數(shù)
- 先來看個(gè)最簡(jiǎn)單的自執(zhí)行函數(shù)
(function(){
}());
相當(dāng)于聲明并調(diào)用
var b=function () {
}
b()
- 自執(zhí)行函數(shù)也可以有名字
function b(){
...
}()
- 自執(zhí)行函數(shù)也可以傳參
function b(i){
console.log(i)
}(5)
下面我們來總結(jié)一下自執(zhí)行函數(shù):
? 自執(zhí)行函數(shù)在調(diào)用上與普通函數(shù)一樣和蚪,可以匿名,可以傳參淑趾。只不過是在聲明的時(shí)候自調(diào)用了一次
? 自執(zhí)行函數(shù)的寫法有兩種 , 推薦第二種寫法
// 1.第一種方式: 兩個(gè)()() 阳仔,function寫在第一個(gè)()里面
(function(){})()
// 2.第二種方式: 一個(gè)() ,里面寫 function(){}()
(function(){}())
匿名函數(shù)
匿名函數(shù)就是沒有名字的函數(shù)
匿名函數(shù)通常與自執(zhí)行函數(shù)結(jié)合使用,因?yàn)槟涿瘮?shù)沒有函數(shù)名扣泊,沒辦法調(diào)用近范,通過自執(zhí)行調(diào)用
匿名函數(shù)的基本形式為
(function(){...})();
前面的括號(hào)包含函數(shù)體,后面的括號(hào)就是給匿名函數(shù)傳遞參數(shù)并立即執(zhí)行之
匿名函數(shù)的作用是避免全局變量的污染以及函數(shù)名的沖突
1.小括號(hào)的作用
小括號(hào)能把我們的表達(dá)式組合分塊旷赖,并且每一塊顺又,也就是每一對(duì)小括號(hào),都有一個(gè)返回值等孵。
這個(gè)返回值實(shí)際上也就是小括號(hào)中表達(dá)式的返回值。
所以蹂空,當(dāng)我們用一對(duì)小括號(hào)把匿名函數(shù)括起來的時(shí)候俯萌,實(shí)際上小括號(hào)對(duì)返回的,就是一個(gè)匿名函數(shù)的Function 對(duì)象上枕。
因此咐熙,小括號(hào)對(duì)加上匿名函數(shù)就如同有名字的函數(shù)般被我們?nèi)〉盟囊梦恢昧恕?/p>
所以如果在這個(gè)引用變量后面再加上參數(shù)列表,就會(huì)實(shí)現(xiàn)普通函數(shù)的調(diào)用形式辨萍。
簡(jiǎn)單來說就是小括號(hào)有返回值棋恼,也就是小括號(hào)內(nèi)的函數(shù)或者表達(dá)式的返回值,所以說小括號(hào)內(nèi)的function返回值等于小括號(hào)的返回值
2.匿名函數(shù)的寫法
方式1锈玉,調(diào)用函數(shù)爪飘,得到返回值。強(qiáng)制運(yùn)算符使函數(shù)調(diào)用執(zhí)行
(function(x,y){
return x+y;
}(3,4));
方式2拉背,調(diào)用函數(shù)师崎,得到返回值。強(qiáng)制函數(shù)直接量執(zhí)行再返回一個(gè)引用椅棺,引用再去調(diào)用執(zhí)行
(function(x,y){
return x+y;
})(3,4);
這種方式也是很多庫(kù)愛用的調(diào)用方式犁罩,如jQuery齐蔽,Mootools。
方式3床估,使用void
void function(x) {
x = x-1;
}(9);
方式4含滴,使用-/+運(yùn)算符
-function(x,y){
return x+y;
}(3,4);
+function(x,y){
return x+y;
}(3,4);
--function(x,y){
return x+y;
}(3,4);
++function(x,y){
return x+y;
}(3,4);
方式5,使用波浪符(~)
~function(x, y) {
return x+y;
}(3, 4);
方式6丐巫,匿名函數(shù)執(zhí)行放在中括號(hào)內(nèi)
[function(){
console.log(this) // 瀏覽器得控制臺(tái)輸出window
}(this)]
方式7谈况,匿名函數(shù)前加typeof
typeof function(){
console.log(this) // 瀏覽器得控制臺(tái)輸出window
}(this)
匿名自執(zhí)行函數(shù)
匿名自執(zhí)行函數(shù)首先是一個(gè)匿名函數(shù),但是這個(gè)函數(shù)是可以自己自動(dòng)執(zhí)行的鞋吉,不需要借助其他的元素
匿名自執(zhí)行函數(shù)的作用:
? 匿名自執(zhí)行函數(shù)最常見的作用是用于實(shí)現(xiàn)閉包的情況中
? 匿名自執(zhí)行函數(shù)還可以用于在js中模擬創(chuàng)建塊級(jí)作用域
匿名函數(shù)
function () {
}
自執(zhí)行
(function(){
//代碼
})();
匿名函數(shù)自執(zhí)行 實(shí)現(xiàn) 異步函數(shù)遞歸
詳情可參考 icode倉(cāng)庫(kù)的 js/異步遞歸調(diào)用.js
目標(biāo):在setTimeout異步函數(shù)中依次 打印 0 1 2 3 4
(function async(i) {
if (i >= 5)
return
else
setTimeout(() => {
console.log(i)
i++
async(i)
}, 1000)
})(0)