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