摘要:為了更好的講解構(gòu)造函數(shù)原型原型鏈等,我們需要復(fù)習(xí)一下函數(shù)的一些基礎(chǔ)知識(shí)。閉包在復(fù)習(xí)了函數(shù)的相關(guān)基礎(chǔ)知識(shí)之后,我們終于可以進(jìn)入閉包。我們可以這樣理解閉包,首先,閉包是一個(gè)函數(shù),是一個(gè)什么樣子的函數(shù)呢是一個(gè)可以訪問另一個(gè)函數(shù)中變量的函數(shù)。
為了更好的講解構(gòu)造函數(shù)、原型、原型鏈等,我們需要復(fù)習(xí)一下函數(shù)的一些基礎(chǔ)知識(shí)。接下來,就讓我們一起回味一些JS的基礎(chǔ)知識(shí)點(diǎn)。
全局變量VS局部變量簡單粗暴的來說,全局/局部變量就是:
1)全局變量:函數(shù)外部聲明,或者不使用var關(guān)鍵字,在運(yùn)行的任何地方都可以引用。
2)局部變量:函數(shù)內(nèi)部聲明,且實(shí)用var關(guān)鍵字,只能在函數(shù)內(nèi)部引用。
如:
1)var a = 10;//全局變量 2)function test(){ a = 10;//全局變量 } 3)function test(){ var a = 10;//局部變量 }
當(dāng)然,我們也可以實(shí)用bind()、call()、apply()等方法改變運(yùn)行環(huán)境。
詳情可以查閱:
1)bind()
2)call()
3)apply()
函數(shù)的arguments是一個(gè)對(duì)象,非數(shù)組,而是一個(gè)類數(shù)組的對(duì)象,包含lenth屬性,適用于動(dòng)態(tài)參數(shù)的場景,不建議濫用,因?yàn)樗鼤?huì)影響你代碼的可讀性。
function add(a,b){ return arguments[0]+arguments[1];//相當(dāng)于return a+b; } add(1,2);//3this指針
如果this在全局作用于下,那么this指向window。如果this在對(duì)象的方法中,則指向該對(duì)象。
window.name = "wuhuiming"; var i = { name:"huimingwu" }; function sayName(){ console.log(this.name); } sayName();//wuhuiming i.sayName = sayName; i.sayName();//huimingwu函數(shù)的屬性
函數(shù)有三個(gè)屬性:name、length和prototype。其中,length又與arguments.length有一點(diǎn)點(diǎn)的區(qū)別,即:length與arguments.length:前一個(gè)為函數(shù)的length,在聲明時(shí)確定,后一個(gè)為arguments的length,根據(jù)調(diào)用時(shí)傳遞的值確定。
閉包在復(fù)習(xí)了函數(shù)的相關(guān)基礎(chǔ)知識(shí)之后,我們終于可以進(jìn)入閉包。作為一個(gè)前端開發(fā)者,看見閉包,是否就立刻興奮了呢?閉包又是什么呢?接下來,讓我們走進(jìn)閉包的世界。
在 JavaScript高級(jí)程序設(shè)計(jì) 一書中,閉包是這樣被描述的——“閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù)”。我們可以這樣理解閉包,首先,閉包是一個(gè)函數(shù),是一個(gè)什么樣子的函數(shù)呢?是一個(gè)可以訪問另一個(gè)函數(shù)中變量的函數(shù)。
function test(){ var i = "Hello World"; function test2() { return i; } return test2; } var test = test(); test();//Hello World
以上就是一個(gè)閉包的簡單案例,test2是一個(gè)函數(shù),是一個(gè)什么樣的函數(shù)呢?它是一個(gè)可以訪問父函數(shù)test作用域中變量i的函數(shù),就這樣,一個(gè)簡單的閉包就產(chǎn)生了。
當(dāng)然,閉包的應(yīng)用還有很多很多很多,如Jquery的封裝方式就是采用了閉包,有興趣的小伙伴可以去圍觀圍觀Jquery的源碼。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/93189.html
摘要:前言這段時(shí)間一直在消化作用域鏈和閉包的相關(guān)知識(shí)。而作用域鏈則是這套規(guī)則這套規(guī)則的具體運(yùn)行。是變量對(duì)象的縮寫那這樣放有什么好處呢我們知道作用域鏈保證了當(dāng)前執(zhí)行環(huán)境對(duì)符合訪問權(quán)限的變量和函數(shù)的有序訪問。 前言:這段時(shí)間一直在消化作用域鏈和閉包的相關(guān)知識(shí)。之前看《JS高程》和一些技術(shù)博客,對(duì)于這些概念的論述多多少少不太清楚或者不太完整,包括一些大神的技術(shù)文章。這也給我的學(xué)習(xí)上造成了一些困惑,...
摘要:也可以在中使用函數(shù)來執(zhí)行命令行程序。注意,這種方式并不能保護(hù)數(shù)據(jù)庫免受惡意用戶的攻擊,只能預(yù)防自己的手誤。必須使用語法才能將解釋為相應(yīng)的變量。上一篇文章指南基礎(chǔ)知識(shí)數(shù)據(jù)類型下一篇文章指南創(chuàng)建刪除文檔 上一篇文章:MongoDB指南---3、MongoDB基礎(chǔ)知識(shí)-數(shù)據(jù)類型下一篇文章:MongoDB指南---5、創(chuàng)建、刪除文檔 本節(jié)將介紹如何將shell作為命令行工具的一部分來使用,如...
摘要:也可以在中使用函數(shù)來執(zhí)行命令行程序。注意,這種方式并不能保護(hù)數(shù)據(jù)庫免受惡意用戶的攻擊,只能預(yù)防自己的手誤。必須使用語法才能將解釋為相應(yīng)的變量。上一篇文章指南基礎(chǔ)知識(shí)數(shù)據(jù)類型下一篇文章指南創(chuàng)建刪除文檔 上一篇文章:MongoDB指南---3、MongoDB基礎(chǔ)知識(shí)-數(shù)據(jù)類型下一篇文章:MongoDB指南---5、創(chuàng)建、刪除文檔 本節(jié)將介紹如何將shell作為命令行工具的一部分來使用,如...
摘要:我稱之為輕量級(jí)函數(shù)式編程。序眾所周知,我是一個(gè)函數(shù)式編程迷。函數(shù)式編程有很多種定義。本書是你開啟函數(shù)式編程旅途的絕佳起點(diǎn)。事實(shí)上,已經(jīng)有很多從頭到尾正確的方式介紹函數(shù)式編程的書了。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson?。 禮ou-Dont-Know-JS》作者 譯者團(tuán)隊(duì)(排名不分先后):阿希、blueken、brucecham、...
摘要:個(gè)人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開始萌生寫文章的想法,到著手...
閱讀 3261·2021-11-23 09:51
閱讀 762·2021-10-14 09:43
閱讀 3290·2021-09-06 15:00
閱讀 2479·2019-08-30 15:54
閱讀 2621·2019-08-30 13:58
閱讀 1953·2019-08-29 13:18
閱讀 1438·2019-08-27 10:58
閱讀 583·2019-08-27 10:53