摘要:例子立即調(diào)用表達式會立即執(zhí)行,不需要調(diào)用顯示調(diào)用只是會調(diào)用一個匿名函數(shù)局部變量不會隨著調(diào)用的結束而被回收,而是一直保存在內(nèi)存中例子不是立即調(diào)用的,需要顯示調(diào)用返回匿名函數(shù)的引用,如,這時指向匿名函數(shù)調(diào)用這個匿名函數(shù),局部變量對于來說一直會常
例子1
立即調(diào)用表達式會立即執(zhí)行,不需要test()調(diào)用
顯示調(diào)用test()只是會調(diào)用一個匿名函數(shù)
局部變量i不會隨著調(diào)用的結束而被回收,而是一直保存在內(nèi)存中
javascriptvar test = (function () { console.log("test func"); var i = 0; return function () { console.log(i); return i++; } })(); console.log("........"); test(); //0 test(); //1 test(); //2 // output // test func // ........ // 0 // 1 // 2例子2
test不是立即調(diào)用的,需要顯示調(diào)用test()返回匿名函數(shù)的引用,如:var a = test(),這時a指向匿名函數(shù)
a()調(diào)用這個匿名函數(shù),局部變量i對于a來說一直會常駐內(nèi)存中
var b = test(),再次調(diào)用test,b會返回一個新的匿名函數(shù)的拷貝,并且i對于b也是唯一的
javascriptvar test = function () { console.log("test func"); var i = 0; return function () { console.log(i); return i++; } }; console.log("........"); var a = test(); a(); //0 a(); //1 a(); //2 var b = test() b(); //0 // output // ........ // test func // 0 // 1 // 2 // test func // 0例子3
不使用閉包,循環(huán)結束后i=3
javascriptvar arr = [1, 2, 3]; var obj = {}; var test = function () { for (var i=0; ivar arr = [1, 2, 3]; var obj = {}; var test = function () { for (var i=0; i 在for循環(huán)里創(chuàng)建了一個立即調(diào)用函數(shù)表達式
fn0,fn1,fn2分別指向了匿名函數(shù)的引用
fn0(),fn1(),fn2()都訪問了i(這個i是位于這個匿名函數(shù)的上層作用域鏈,它會被保存在內(nèi)存中,對于每一個函數(shù)引用來說i是唯一的)
javascriptvar arr = [1, 2, 3]; var obj = {}; var test = function () { for (var i=0; i 下面這個例子為了加深理解
javascript例子4 var arr = [1, 2, 3]; // 用來存放函數(shù)的數(shù)組 var fns = []; var add = function () { for (var i = 0; i < arr.length; i++) { (function (i) { // 把匿名函數(shù)push到fns中 fns.push(function () { // 由于函數(shù)引用了上層作用域鏈的i,當被調(diào)用時i值不會被改變 console.log(arr[i]); }); })(i); } }; // 遍歷fns執(zhí)行數(shù)組中的函數(shù) var start = function () { for (var i = 0; i < fns.length; i++) { // 執(zhí)行fns中的匿名函數(shù) fns[i](); } }; add(); start(); // output // 1 // 2 // 3javascript
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85792.html
摘要:針對于面向?qū)ο缶幊痰?。因為面向?qū)ο缶褪轻槍ο罄又械氖睾騺磉M行執(zhí)行某些動作。這就是閉包的用途之一延續(xù)變量周期。把變量放在閉包里面和放在全局變量里面,影響是一致的。 1.前言 這段時間,金三銀四,很多人面試,很多人分享面試題。在前段時間,我也臨時擔任面試官,為了大概了解面試者的水平,我也寫了一份題目,面試了幾個前端開發(fā)者。在這段時間里面,我在學,在寫設計模式的一些知識,想不到的設計模式...
摘要:今天給大家分享的主題是前端的自我成長,這是一個關于成長的話題。的確如此,到目前為止,還沒有任何一個大學會教前端,倒是有些培訓班,會講網(wǎng)頁開發(fā)三劍客。 今天給大家分享的主題是前端的自我成長,這是一個關于成長的話題。 很多人都有這樣的感覺:聽了很多技術圈子的分享,有的有深度,有的循循善誘,深入淺出,但是呢,幾年下來,到底哪些用上了,哪些對自己真的有幫助了?反而有些模糊。 201...
摘要:今天給大家分享的主題是前端的自我成長,這是一個關于成長的話題。的確如此,到目前為止,還沒有任何一個大學會教前端,倒是有些培訓班,會講網(wǎng)頁開發(fā)三劍客。 今天給大家分享的主題是前端的自我成長,這是一個關于成長的話題。 很多人都有這樣的感覺:聽了很多技術圈子的分享,有的有深度,有的循循善誘,深入淺出,但是呢,幾年下來,到底哪些用上了,哪些對自己真的有幫助了?反而有些模糊。 201...
摘要:今天給大家分享的主題是前端的自我成長,這是一個關于成長的話題。的確如此,到目前為止,還沒有任何一個大學會教前端,倒是有些培訓班,會講網(wǎng)頁開發(fā)三劍客。 今天給大家分享的主題是前端的自我成長,這是一個關于成長的話題。 很多人都有這樣的感覺:聽了很多技術圈子的分享,有的有深度,有的循循善誘,深入淺出,但是呢,幾年下來,到底哪些用上了,哪些對自己真的有幫助了?反而有些模糊。 201...
閱讀 2069·2021-11-23 09:51
閱讀 2213·2021-09-29 09:34
閱讀 3704·2021-09-22 15:50
閱讀 3564·2021-09-22 15:23
閱讀 2591·2019-08-30 15:55
閱讀 708·2019-08-30 15:53
閱讀 3079·2019-08-29 17:09
閱讀 2635·2019-08-29 13:57