摘要:閉包作用解析保存函數(shù)執(zhí)行形成一個(gè)私有作用域,函數(shù)執(zhí)行完成,開成的這個(gè)棧內(nèi)存一般情況下都會(huì)自動(dòng)釋放函數(shù)執(zhí)行完成,當(dāng)前私有作用哉棧內(nèi)存中的某一部分內(nèi)容被內(nèi)存以外的其它東西變量元素的事件占用了,當(dāng)前的棧內(nèi)存就不能釋放掉,也就形成了不銷毀的私有作用
閉包作用解析:保存
函數(shù)執(zhí)行形成一個(gè)私有作用域,函數(shù)執(zhí)行完成,開成的這個(gè)棧內(nèi)存一般情況下都會(huì)自動(dòng)釋放
函數(shù)執(zhí)行完成,當(dāng)前私有作用哉(棧內(nèi)存)中的某一部分內(nèi)容被內(nèi)存以外的其它東西(變量/元素的事件)占用了,當(dāng)前的棧內(nèi)存就不能釋放掉,也就形成了不銷毀的私有作用域(里面的私有變量也不會(huì)銷毀)
函數(shù)作用域函數(shù)內(nèi)部可以訪問(wèn)函數(shù)外部的變量,
函數(shù)外部不可以訪問(wèn)函數(shù)內(nèi)部的變量
當(dāng)在函數(shù)外部定義一個(gè)變量,變量在函數(shù)內(nèi)部發(fā)生了變化,函數(shù)內(nèi)部和外部都能訪問(wèn)到這個(gè)變量
var a = 1; function fn1(){ a++; console.log(a) //2 } fn1() console.log(a) //2閉包作用例子:保存
fn():調(diào)用完函數(shù),就會(huì)釋放棧內(nèi)存
f(): 在函數(shù)外面有一個(gè)變量接收了這個(gè)返回值,此時(shí) 當(dāng)前作用域不能銷毀
function fn() { var i = 1; return function(n) { console.log(n + i++) } } var f = fn(); f(10); //11 正確:11,10+1=10,之后1為2,因?yàn)閒(10),在函數(shù)fn()外面調(diào)用,故函數(shù)fn()里的棧內(nèi)存不銷毀,i一直存在 fn()(10); //12 正確:11 先執(zhí)行fn(),之后再執(zhí)行(10),即f(10),執(zhí)行fn是重新把所有的流程執(zhí)行一遍,臨時(shí)不銷毀,當(dāng)返回結(jié)果執(zhí)行完,沒(méi)有被占用了,就會(huì)釋放掉 f(20); //21 正確:22 //棧內(nèi)存沒(méi)有銷毀,20+1 fn()(20); //22 正確:21 第二次執(zhí)行fn是重新把所有的流程執(zhí)行一遍,和第一次沒(méi)有任何直接的關(guān)系,20+2=22
function fn() { var i = 1; return function(n) { console.log(n + i++) } } var f = fn(); f(10); //11 f(20); //22
function fn() { var i = 1; return function(n) { console.log(n + i++) } } var f = fn(); fn()(10); //11 fn()(20); //21
function fn() { var i = 1; return function(n) { console.log(n + i++) } } var f = fn(); fn()(10); //11 f(20); //21舉一反三
var i = 1; function fn() { return function(n) { console.log(n + i++) } } var f = fn(); f(10); //11 fn()(10); //12 f(20); //23 fn()(20); //24
function fn(i) { return function(n) { console.log(n + i++) } //console.log(i) //因?yàn)閞eturn,所以走不到這一hi } var f = fn(10); f(20); //30 正確:30 fn(10)(20); //31 正確:30 f(30); //40 正確:41 fn(20)(10); // 31 正確:30 f(40) //50 正確:52
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99276.html
摘要:閉包是什么這是一個(gè)在面試的過(guò)程中出現(xiàn)的概率為以上的問(wèn)題,也是我們張口就來(lái)的問(wèn)題。文章推薦我們面試中在被問(wèn)到閉包這個(gè)問(wèn)題是要注意的幾點(diǎn)閉包的延伸,讓面試變得 閉包是什么?這是一個(gè)在面試的過(guò)程中出現(xiàn)的概率為60%以上的問(wèn)題,也是我們張口就來(lái)的問(wèn)題。但是我們往往發(fā)現(xiàn),在面試的過(guò)程中我們的回答并不那么讓面試官滿意,我們雖然能張口說(shuō)出一些但是卻不能系統(tǒng)的對(duì)這個(gè)問(wèn)題進(jìn)行回答。面試官希望加入自己團(tuán)隊(duì)...
摘要:此時(shí)產(chǎn)生了閉包。導(dǎo)致,函數(shù)的活動(dòng)對(duì)象沒(méi)有被銷毀。是不是跟你想的不一樣其實(shí),這個(gè)例子重點(diǎn)就在函數(shù)上,這個(gè)函數(shù)的第一個(gè)參數(shù)接受一個(gè)函數(shù)作為回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)并不會(huì)立即執(zhí)行,它會(huì)在當(dāng)前代碼執(zhí)行完,并在給定的時(shí)間后執(zhí)行。 上一節(jié)說(shuō)了執(zhí)行上下文,這節(jié)咱們就乘勝追擊來(lái)搞搞閉包!頭疼的東西讓你不再頭疼! 一、函數(shù)也是引用類型的。 function f(){ console.log(not cha...
摘要:目錄執(zhí)行環(huán)境與作用域鏈立即執(zhí)行函數(shù)閉包知識(shí)點(diǎn)什么是閉包使用閉包的意義與注意點(diǎn)閉包的具體應(yīng)用小結(jié)這是基本語(yǔ)法的函數(shù)部分的第篇文章,主要講述了中比較重要的知識(shí)點(diǎn)閉包在講閉包之前,在上一篇函數(shù)二的基礎(chǔ)上,進(jìn)一步深化執(zhí)行環(huán)境和作用域鏈的知識(shí)點(diǎn),并補(bǔ) 目錄 1.執(zhí)行環(huán)境與作用域鏈 2. 立即執(zhí)行函數(shù) 3. 閉包知識(shí)點(diǎn) 3.1 什么是閉包 3.2 使用閉包的意義與注意點(diǎn) 3.3 閉包的具體應(yīng)用 4...
摘要:閉包在我的前端學(xué)習(xí)中一直也是盲點(diǎn),之前很多次看到別人提到我都是完全聽不懂。閉包導(dǎo)致的問(wèn)題因?yàn)殚]包會(huì)使得函數(shù)中的變量都保存在內(nèi)存中,如不能及時(shí)釋放會(huì)對(duì)性能造成影響。 閉包在我的前端學(xué)習(xí)中一直也是盲點(diǎn),之前很多次看到別人提到我都是完全聽不懂。最近一直看書和寫demo,對(duì)閉包也逐漸有所理解了,在這里寫下這篇博客。 從作用域鏈講起 首先明確幾個(gè)概念:1.JavaScript有函數(shù)級(jí)作用域,但沒(méi)...
摘要:一前言這個(gè)周末,注意力都在學(xué)習(xí)基礎(chǔ)知識(shí)上面,剛好看到了閉包這個(gè)神圣的東西,所以打算把這兩天學(xué)到的總結(jié)下來(lái),算是鞏固自己所學(xué)。因此要注意閉包的使用,否則會(huì)導(dǎo)致性能問(wèn)題。五總結(jié)閉包的作用能夠讀取其他函數(shù)內(nèi)部變量。 # 一、前言 這個(gè)周末,注意力都在學(xué)習(xí)基礎(chǔ)Js知識(shí)上面,剛好看到了閉包這個(gè)神圣的東西,所以打算把這兩天學(xué)到的總結(jié)下來(lái),算是鞏固自己所學(xué)。也可能有些不正確的地方,也請(qǐng)大家看到了,麻...
閱讀 2427·2021-11-25 09:43
閱讀 1203·2021-09-07 10:16
閱讀 2619·2021-08-20 09:38
閱讀 2945·2019-08-30 15:55
閱讀 1465·2019-08-30 13:21
閱讀 896·2019-08-29 15:37
閱讀 1448·2019-08-27 10:56
閱讀 2097·2019-08-26 13:45