自執(zhí)行函數(shù)
下面三個(gè)自執(zhí)行函數(shù)是一樣的
//1. function test(i){ console.log(i) } test("aa") //2. (function(i){ console.log(i) })("aa") // 3. var aa = "aa"; (function(i){ console.log(i) })(aa)
var a = [1, 2, 3, 4]; { var a = [1, 2, 3, 4, 5]; (function(i) { var a = [1, 2, 3, 4, 5, 6]; for (var i = 0; i < a.length; i++) { console.log(i) //0,1,2,3,4,5 } })(a) }this
var num =1; var obj = { num:2, fn:(function(num){ this.num*=2; num+=2; return function(){ this.num*=3; num++; console.log(num) } })(num) //window下的num } var fn = obj.fn; fn(); //4 obj.fn() //5 console.log(num,obj.num); //6,6fn()
console.log(fn) console.log(obj.fn())拆分
var num =1; var obj = { num:2, fn:(function(num){ this.num*=2; num+=2; console.log(this) //window return function(){ this.num*=3; num++; console.log(this) //window console.log(num) //4 console.log(this.num) //6 } })(num) //window下的num } var fn = obj.fn; fn(); console.log(num,obj.num); //6,2
var num =1; var obj = { num:2, fn:(function(num){ this.num*=2; num+=2; console.log(this) //window return function(){ this.num*=3; num++; console.log(this) //obj console.log(num) //4 console.log(this.num) //6 } })(num) //window下的num } var fn = obj.fn; obj.fn() console.log(num,obj.num); //2,6
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99299.html
摘要:在一個(gè)閉包環(huán)境內(nèi)修改變量值,不會(huì)影響另一個(gè)閉包中的變量。直到看到函數(shù)閉包閉包這篇文章的代碼一部分,終于明白其中的邏輯了。 閉包 閉包定義:指擁有多個(gè)變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。函數(shù)內(nèi)部可以直接讀取全局變量。函數(shù)內(nèi)部變量無(wú)法在函數(shù)外部訪(fǎng)問(wèn)。函數(shù)內(nèi)部聲明要用var或者let聲明,不然會(huì)變成全局變量鏈?zhǔn)阶饔糜颍鹤訉?duì)象會(huì)一級(jí)級(jí)向上尋找...
摘要:為了更好的理解,在閱讀此文之前建議先閱讀上一篇進(jìn)擊之詞法作用域與作用域鏈?zhǔn)裁词情]包閉包的含義就是閉合,包起來(lái),簡(jiǎn)單的來(lái)說(shuō),就是一個(gè)具有封閉功能與包裹功能的結(jié)構(gòu)。在中函數(shù)構(gòu)成閉包。 為了更好的理解,在閱讀此文之前建議先閱讀上一篇《進(jìn)擊JavaScript之詞法作用域與作用域鏈》 1.什么是閉包 閉包的含義就是閉合,包起來(lái),簡(jiǎn)單的來(lái)說(shuō),就是一個(gè)具有封閉功能與包裹功能的結(jié)構(gòu)。所謂的閉包就是...
摘要:以上描述,全部符合閉包的描述,那這就是閉包。二執(zhí)行過(guò)程之前的文章講了函數(shù)的執(zhí)行上下文棧,變量對(duì)象,作用域鏈等內(nèi)容,接下來(lái)通過(guò)閉包代碼回顧代碼是怎么樣的執(zhí)行過(guò)程。將活動(dòng)對(duì)象壓入作用域鏈頂端。函數(shù)執(zhí)行結(jié)束,彈出執(zhí)行上下文棧。 本文一共 1300 字,讀完只需 5 分鐘 概述 閉包, 可以說(shuō)是每個(gè)前端工程師都聽(tīng)說(shuō)的一個(gè)詞,咋一看很難從字面上去理解,從而給人留下了閉包是一個(gè)重要又難以理解的...
摘要:而閉包的妙處在于,當(dāng)函數(shù)在執(zhí)行完畢后它的活動(dòng)對(duì)象不會(huì)被銷(xiāo)毀,因?yàn)槟涿瘮?shù)的作用域鏈仍然在引用函數(shù)的活動(dòng)對(duì)象它的作用域鏈會(huì)被銷(xiāo)毀。 一、閉包 閉包是指有權(quán)訪(fǎng)問(wèn)另一個(gè)函數(shù)作用域中的變量的函數(shù)。創(chuàng)建閉包的常用方式是,在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)。 請(qǐng)看以下代碼:我們?cè)赾reateComparisonFunction函數(shù)里創(chuàng)建了一個(gè)閉包 function createComparisonFun...
摘要:中沒(méi)有可執(zhí)行的函數(shù)了,執(zhí)行完出棧。當(dāng)某個(gè)函數(shù)被調(diào)用時(shí),會(huì)創(chuàng)建一個(gè)執(zhí)行環(huán)境及相應(yīng)的作用域鏈。檢查當(dāng)前環(huán)境中的函數(shù)聲明使用聲明的。確定指向所以說(shuō)的指向,是在函數(shù)執(zhí)行時(shí)確定的。 理解js 的執(zhí)行過(guò)程是很重要的,比如,作用域,作用域鏈,變量提升,閉包啊,要想明白這些,你就得搞懂函數(shù)執(zhí)行時(shí)到底發(fā)生了什么! 一、執(zhí)行環(huán)境(Execution Context)又稱(chēng)執(zhí)行上下文 當(dāng)代碼執(zhí)行時(shí)都會(huì)產(chǎn)生一個(gè)...
閱讀 1461·2021-11-25 09:43
閱讀 2601·2021-09-24 10:30
閱讀 3671·2021-09-06 15:02
閱讀 3609·2019-08-30 15:55
閱讀 3310·2019-08-30 15:53
閱讀 1705·2019-08-30 15:52
閱讀 2151·2019-08-30 14:21
閱讀 2019·2019-08-30 13:55