摘要:所以,父對(duì)象的所有變量,對(duì)子對(duì)象都是可見(jiàn)的,反之則不成立。參考資料阮一峰老師的學(xué)習(xí)閉包知乎上里的閉包是什么應(yīng)用場(chǎng)景有哪些
什么是閉包
用一句話概括:函數(shù)外部可以訪問(wèn)函數(shù)內(nèi)部的變量(不懂沒(méi)關(guān)系,請(qǐng)往下面看)
閉包的原理 javascript作用域對(duì)于函數(shù)外部的變量,函數(shù)內(nèi)部可以訪問(wèn)
var n=1000; function fn(){ console.log(n); } fn();//輸出1000
function fn(){ var n=1000; } console.log(n)//n is not defined如何從外部讀取內(nèi)部變量?
function fn(){ var n=1000; function fn1(){ return n; } return fn1; } var f=fn(); console.log(f());//1000
在上面的代碼中,函數(shù)fn1就被包括在函數(shù)fn內(nèi)部,這時(shí)fn內(nèi)部的所有局部變量,對(duì)f1都是可見(jiàn)的。但是反過(guò)來(lái)就不行,f1內(nèi)部的局部變量,對(duì)fn就是不可見(jiàn)的。這就是Javascript語(yǔ)言特有的"鏈?zhǔn)阶饔糜?結(jié)構(gòu)(chain scope),子對(duì)象會(huì)一級(jí)一級(jí)地向上尋找所有父對(duì)象的變量。所以,父對(duì)象的所有變量,對(duì)子對(duì)象都是可見(jiàn)的,反之則不成立。
既然f1可以讀取fn中的局部變量,那么只要把f1作為返回值,我們不就可以在fn外部讀取它的內(nèi)部變量了嗎!
//閉包自執(zhí)行 var foo=function fn(){ var n=1000; return { get_n:function(){ return n; }, set_n:function(new_n){ n=new_n; } } }(); //foo.n 訪問(wèn)不了,undefined foo.set_n(999);//通過(guò)接口可以設(shè)置內(nèi)部變量n console.log(foo.get_n());//通過(guò)接口可以讀取內(nèi)部變量n
var Foo = function(){ var name = "fooname"; var age = 12; this.getName = function(){ return name; }; this.getAge = function(){ return age; }; }; var foo = new Foo(); foo.name; // => undefined foo.age; // => undefined foo.getName(); // => "fooname" foo.getAge(); // => 12參考資料
阮一峰老師的:學(xué)習(xí)Javascript閉包(Closure)
知乎上:JavaScript 里的閉包是什么?應(yīng)用場(chǎng)景有哪些?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88205.html
摘要:插件開發(fā)前端掘金作者原文地址譯者插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡(jiǎn)單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內(nèi)優(yōu)雅的實(shí)現(xiàn)文件分片斷點(diǎn)續(xù)傳。 Vue.js 插件開發(fā) - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡(jiǎn)單的方式。插....
摘要:今天同學(xué)去面試,做了兩道面試題全部做錯(cuò)了,發(fā)過(guò)來(lái)給道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 排序算法 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha) - 前端 - 掘金來(lái)自《JavaScript 標(biāo)準(zhǔn)參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡(jiǎn)介 算法實(shí)現(xiàn) 選擇排序 簡(jiǎn)介 算法實(shí)現(xiàn) ... 圖例詳解那道 setTimeout 與循環(huán)閉包的經(jīng)典面...
摘要:從最開始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...
摘要:談起閉包,它可是兩個(gè)核心技術(shù)之一異步基于打造前端持續(xù)集成開發(fā)環(huán)境本文將以一個(gè)標(biāo)準(zhǔn)的項(xiàng)目為例,完全拋棄傳統(tǒng)的前端項(xiàng)目開發(fā)部署方式,基于容器技術(shù)打造一個(gè)精簡(jiǎn)的前端持續(xù)集成的開發(fā)環(huán)境。 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果讀完本文還不懂,可以揍我。 不論你是javascript新手還是老鳥,不論是面試求職,還是日...
摘要:跨域請(qǐng)求詳解從繁至簡(jiǎn)前端掘金什么是為什么要用是的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問(wèn)的問(wèn)題。異步編程入門道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 jsonp 跨域請(qǐng)求詳解——從繁至簡(jiǎn) - 前端 - 掘金什么是jsonp?為什么要用jsonp?JSONP(JSON with Padding)是JSON的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問(wèn)的問(wèn)題...
閱讀 2870·2021-09-22 15:43
閱讀 4796·2021-09-06 15:02
閱讀 859·2019-08-29 13:55
閱讀 1692·2019-08-29 12:58
閱讀 3081·2019-08-29 12:38
閱讀 1259·2019-08-26 12:20
閱讀 2275·2019-08-26 12:12
閱讀 3324·2019-08-23 18:35