摘要:在上面的代碼中,函數(shù)實際上就是函數(shù)的閉包函數(shù),我們讓其執(zhí)行三次,結(jié)果分別為。這是因為,函數(shù)中的局部變量一直被保存在內(nèi)存中。所以閉包有個缺點,就是內(nèi)存占用較大。自執(zhí)行函數(shù)上面這段函數(shù)也是閉包的一種。我們利用閉包來做一個小例子。
變量作用域和閉包 變量作用域
當我們寫 js 文檔的時候經(jīng)常會設(shè)置變量,變量的類型有兩種:
全局變量
局部變量
這兩種類型的變量有者不同的作用范圍,全局變量的作用范圍是面向整個文檔的,可以稱之為全局作用域,局部變量是在函數(shù)內(nèi)部設(shè)置的,作用范圍為當前的函數(shù),外部不能直接引用,因此稱為函數(shù)作用域。
var a=1; function test(){ var b=2; console.log(a) } test()// 1 console.log(b) //error閉包
簡單來說嵌套在函數(shù)里的函數(shù)以及周邊的變量叫閉包
閉包周邊的變量在執(zhí)行完函數(shù)之后不會被釋放,會常駐內(nèi)存
function test(){ var a = 1; function test1(){ var b = 2 }return test1 } var test2=test() test2();
上面的代碼就是一段閉包,函數(shù)test1被包裹在函數(shù)test中,對于test1而言,test內(nèi)的所有變量都是可見的,但是反過來不行。將test1作為返回值,就可以在test外部進行讀取了。
function test(){ var a = 1; function test1(){ a++ console.log(a) }return test1 } var test2=test() test2();//2 test2();//3 test2();//4
在上面的代碼中,函數(shù)test2實際上就是函數(shù)test1的閉包函數(shù),我們讓其執(zhí)行三次,結(jié)果分別為2、3、4。這是因為,函數(shù)test中的局部變量一直被保存在內(nèi)存中。所以閉包有個缺點,就是內(nèi)存占用較大。
自執(zhí)行函數(shù)
var callback=(function(){ var a = 1; function test(){ a ++; console.log(a) } return test; })(); callback();2 callback();3
上面這段函數(shù)也是閉包的一種。
我們利用閉包來做一個小例子。
我們創(chuàng)建了一個列表,當我們點擊列表的時候,瀏覽器將列表里的內(nèi)容彈窗顯示。
END文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/87340.html
摘要:作用域和閉包以及自執(zhí)行函數(shù)作用域作用域分為種全局作用域全局作用域就是在的任何位置都能訪問過函數(shù)作用域只能在函數(shù)里面調(diào)用的稱之為函數(shù)作用域閉包嵌套在函數(shù)里面的函數(shù)及周邊的變量叫閉包閉包存在的問題是周邊變量不會被釋放,常駐內(nèi)存中閉包的缺點消耗內(nèi) 作用域和閉包以及自執(zhí)行函數(shù) 作用域 作用域分為2種 1、全局作用域 全局作用域就是在js的任何位置都能訪問過 2、函數(shù)作用域 只能在函數(shù)里面調(diào)用的...
摘要:大名鼎鼎的作用域和閉包,面試經(jīng)常會問到。聲明理解閉包,先理解函數(shù)的執(zhí)行過程。閉包的基本結(jié)構(gòu)因為閉包不允許外界直接訪問,所以只能間接訪問函數(shù)內(nèi)部的數(shù)據(jù),獲得函數(shù)內(nèi)部數(shù)據(jù)的使用權(quán)。 大名鼎鼎的作用域和閉包,面試經(jīng)常會問到。閉包(closure)是Javascript語言的一個難點,也是它的特色。 聲明 理解閉包,先理解函數(shù)的執(zhí)行過程。 代碼在執(zhí)行的過程中會有一個預解析的過程,也就是在代碼的...
摘要:寫在前面對于一個前端開發(fā)者,應(yīng)該沒有不知道作用域的。欺騙詞法作用域有兩個機制可以欺騙詞法作用域和。關(guān)于你不知道的的第一部分作用域和閉包已經(jīng)結(jié)束了,但是,更新不會就此止住未完待續(xù) 這是《你不知道的JavaScript》的第一部分。 本系列持續(xù)更新中,Github 地址請查閱這里。 寫在前面 對于一個前端開發(fā)者,應(yīng)該沒有不知道作用域的。它是一個既簡單有復雜的概念,簡單到每行代碼都有它的影子...
摘要:閉包的出現(xiàn)正好結(jié)合了全局變量和局部變量的優(yōu)點。這就是閉包的一個使用場景保存現(xiàn)場。 前言 什么是閉包,其實閉包是可以重用一個對象,又保護對象不被篡改的一種機制。什么是重用一個對象又保護其不被篡改呢?請看下面的詳解。 作用域和作用域鏈 注意理解作用域和作用域鏈對理解閉包有非常大的幫助,所以我們先說一下作用域和作用域鏈 什么是作用域作用域表示的是一個變量的可用范圍、其實它是一個保存變量的對象...
摘要:注意由于閉包會額外的附帶函數(shù)的作用域內(nèi)部匿名函數(shù)攜帶外部函數(shù)的作用域,因此,閉包會比其它函數(shù)多占用些內(nèi)存空間,過度的使用可能會導致內(nèi)存占用的增加。 作用域和作用域鏈是javascript中非常重要的特性,對于他們的理解直接關(guān)系到對于整個javascript體系的理解,而閉包又是對作用域的延伸,也是在實際開發(fā)中經(jīng)常使用的一個特性,實際上,不僅僅是javascript,在很多語言中都...
閱讀 3323·2021-11-12 10:36
閱讀 2479·2021-11-02 14:43
閱讀 2155·2019-08-30 14:23
閱讀 3469·2019-08-30 13:08
閱讀 928·2019-08-28 18:09
閱讀 3139·2019-08-26 12:22
閱讀 3151·2019-08-23 18:24
閱讀 2023·2019-08-23 18:17