摘要:對于一個個剛剛接觸前端的新手,天天聽人講閉包,聽的那個高大尚,心中對各位技術(shù)大佬是那個的膜拜,于是做為前端菜鳥的我,就去了解了傳說中的閉包。
對于一個個剛剛接觸前端的新手,天天聽人講閉包,聽的那個高大尚,心中對各位技術(shù)大佬是那個的膜拜,于是做為前端菜鳥的我,就去了解了傳說中的閉包。
何為閉包?
通俗易懂的講,就是可以調(diào)用函數(shù)內(nèi)部的變量和方法
舉例說明如下:
function test(){ var x = 1; var y = 2; function func1(){ x++; console.log("x:"+x); } function func2(){ y++; console.log("y:"+y); } func3 = function(){ console.log("x+y:"+(x+y)); } return { func1:func1 } } var obj1 = test(); obj1.func1();//輸出x:2 obj1.func1();//輸出x:3 func3();//輸出x+y:5 var obj2 = test(); obj2.func1();//輸出x:2 obj2.func1();//輸出x:3 obj2.func1();//輸出x:4 func3();//輸出x+y:6 obj1.func1();//輸出x:4 func3();//輸出x+y:6
解析:你可以把test理解成一個對象,首先建立一個obj1對象,這個時(shí)候調(diào)用obj1.func1()時(shí),test中的x會被累加,這個就是閉包的一個特點(diǎn),就是外部可以改變函數(shù)內(nèi)部的變量值,這里要記住一點(diǎn),只有在test中return返回的函數(shù)在外部才能被調(diào)用,如果此時(shí)調(diào)用obj1.func2()會提示出錯的,只有跟func1一樣在return中返回才能被外部調(diào)用;func3可以理解為公有的函數(shù),但是只有在聲明完test之后才能被調(diào)用,因?yàn)閒unc3第一次定義是在test中定義的,所有要先test()之后才能被調(diào)用;obj2是新建立的一個對象,此時(shí)的obj1和obj2兩個對象是互不干擾的,各自疊加,這也是閉包的一個特性,可以用在以后建立多個計(jì)時(shí)器時(shí)使用閉包,事半功倍;這里要特別強(qiáng)調(diào)一下func3這個函數(shù),第一個func3調(diào)用的是對象obj1中的func3,而當(dāng)obj2新對象聲明之后,func3調(diào)用的就是obj2中的func3了
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/84528.html
摘要:函數(shù)在執(zhí)行的時(shí)候執(zhí)行函數(shù),將當(dāng)前的變量對象由于當(dāng)前的環(huán)境是函數(shù),所以將其活動對象作為變量對象添加到作用域鏈的前端。此時(shí),由于在執(zhí)行,而作用域鏈也存在,所以可以在作用域鏈上進(jìn)行查找,去訪問的變量。 一、現(xiàn)狀 閉包是jser繞不過的坎,一直在都在說,套用 simpson 的話來說:JavaScript中閉包無處不在,你只需要能夠識別并擁抱它。 閉包是基于詞法作用域書寫代碼時(shí)的自然結(jié)果,你甚...
摘要:將他們放在堆中是為了不影響棧的效率。接著是臨時(shí)空間函數(shù)執(zhí)行的時(shí)候,會臨時(shí)開辟一塊內(nèi)存空間,這塊內(nèi)存空間長得和外面這個一樣,也有自己的棧堆,當(dāng)函數(shù)運(yùn)行完就銷毀。中的內(nèi)存第一個部分還是和上面的一樣,有棧堆運(yùn)行時(shí)環(huán)境,另外還有一個緩沖區(qū)存放。 0.前言 主要結(jié)合了內(nèi)存的概念講了js的一些的很簡單、但是又不小心就犯錯的地方。結(jié)論:js執(zhí)行順序,先定義,后執(zhí)行,從上到下,就近原則。閉包可以讓外部...
摘要:在內(nèi)部,理所當(dāng)然能訪問到局部變量,但當(dāng)作為的返回值賦給外的全局變量時(shí),神奇的事情發(fā)生了在全局作用域中訪問到了,這就是閉包。而閉包最神奇的地方就是能在一個函數(shù)外訪問函數(shù)中的局部變量,把這些變量用閉包的形式放在函數(shù)中便能避免污染。 一、閉包是什么? 《JavaScript高級程序設(shè)計(jì)》中寫道:閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù),如果用下定義的觀點(diǎn)看,這句話就是說閉包是函數(shù),我...
本文不會過多講解基礎(chǔ)知識,更多說的是在使用useRef如何能擺脫 這個 閉包陷阱 ? react hooks 的閉包陷阱 基本每個開發(fā)員都有遇見,這是很令人抓狂的?! ?以下react示范demo,均為react 16.8.3 版本) 列一個具體的場景: functionApp(){ const[count,setCount]=useState(1); useEffect(()=...
摘要:我們可以用普通函數(shù)內(nèi)部嵌套匿名函數(shù),形成一個閉包來使變量駐留在內(nèi)存中。局部變量閉包為什么要將賦值給變量呢這里我們就要談到匿名函數(shù)調(diào)用問題匿名函數(shù)如何調(diào)用還是上面的例子會將整個函數(shù)體打印出來這樣才調(diào)用了函數(shù)內(nèi)部的匿名函數(shù)看到這里。 閉包含義: 閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的常見的方式,就是在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù),通過另一個函數(shù)訪問這個函數(shù)的局部變量。 這...
閱讀 3816·2021-10-18 13:34
閱讀 2561·2021-08-11 11:15
閱讀 1324·2019-08-30 15:44
閱讀 801·2019-08-26 10:32
閱讀 1135·2019-08-26 10:13
閱讀 2150·2019-08-23 18:36
閱讀 1858·2019-08-23 18:35
閱讀 612·2019-08-23 17:10