摘要:對于一個個剛剛接觸前端的新手,天天聽人講閉包,聽的那個高大尚,心中對各位技術大佬是那個的膜拜,于是做為前端菜鳥的我,就去了解了傳說中的閉包。
對于一個個剛剛接觸前端的新手,天天聽人講閉包,聽的那個高大尚,心中對各位技術大佬是那個的膜拜,于是做為前端菜鳥的我,就去了解了傳說中的閉包。
何為閉包?
通俗易懂的講,就是可以調用函數內部的變量和方法
舉例說明如下:
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對象,這個時候調用obj1.func1()時,test中的x會被累加,這個就是閉包的一個特點,就是外部可以改變函數內部的變量值,這里要記住一點,只有在test中return返回的函數在外部才能被調用,如果此時調用obj1.func2()會提示出錯的,只有跟func1一樣在return中返回才能被外部調用;func3可以理解為公有的函數,但是只有在聲明完test之后才能被調用,因為func3第一次定義是在test中定義的,所有要先test()之后才能被調用;obj2是新建立的一個對象,此時的obj1和obj2兩個對象是互不干擾的,各自疊加,這也是閉包的一個特性,可以用在以后建立多個計時器時使用閉包,事半功倍;這里要特別強調一下func3這個函數,第一個func3調用的是對象obj1中的func3,而當obj2新對象聲明之后,func3調用的就是obj2中的func3了
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84528.html
摘要:在內部,理所當然能訪問到局部變量,但當作為的返回值賦給外的全局變量時,神奇的事情發生了在全局作用域中訪問到了,這就是閉包。而閉包最神奇的地方就是能在一個函數外訪問函數中的局部變量,把這些變量用閉包的形式放在函數中便能避免污染。 一、閉包是什么? 《JavaScript高級程序設計》中寫道:閉包是指有權訪問另一個函數作用域中的變量的函數,如果用下定義的觀點看,這句話就是說閉包是函數,我...
本文不會過多講解基礎知識,更多說的是在使用useRef如何能擺脫 這個 閉包陷阱 ? react hooks 的閉包陷阱 基本每個開發員都有遇見,這是很令人抓狂的。 (以下react示范demo,均為react 16.8.3 版本) 列一個具體的場景: functionApp(){ const[count,setCount]=useState(1); useEffect(()=...
摘要:我們可以用普通函數內部嵌套匿名函數,形成一個閉包來使變量駐留在內存中。局部變量閉包為什么要將賦值給變量呢這里我們就要談到匿名函數調用問題匿名函數如何調用還是上面的例子會將整個函數體打印出來這樣才調用了函數內部的匿名函數看到這里。 閉包含義: 閉包是指有權訪問另一個函數作用域中的變量的函數,創建閉包的常見的方式,就是在一個函數內部創建另一個函數,通過另一個函數訪問這個函數的局部變量。 這...
閱讀 3708·2021-10-18 13:34
閱讀 2397·2021-08-11 11:15
閱讀 1201·2019-08-30 15:44
閱讀 687·2019-08-26 10:32
閱讀 986·2019-08-26 10:13
閱讀 2065·2019-08-23 18:36
閱讀 1775·2019-08-23 18:35
閱讀 523·2019-08-23 17:10