摘要:閉包就是定義在函數(shù)中的函數(shù),是函數(shù)內(nèi)外部連接的橋梁,閉包的意義是當(dāng)前作用域總是能夠訪問(wèn)外部函數(shù)作用域的變量函數(shù)是唯一擁有自身作用域的結(jié)構(gòu),所以閉包的創(chuàng)建依賴(lài)于函數(shù)閉包的優(yōu)點(diǎn)也是缺點(diǎn),可以避免使用全局變量全局變量污染導(dǎo)致應(yīng)用程序不可預(yù)測(cè)性,推
閉包就是定義在函數(shù)中的函數(shù),是函數(shù)內(nèi)外部連接的橋梁,閉包的意義是:當(dāng)前作用域總是能夠訪問(wèn)外部函數(shù)作用域的變量;函數(shù)是唯一擁有自身作用域的結(jié)構(gòu),所以閉包的創(chuàng)建依賴(lài)于函數(shù) 閉包的優(yōu)點(diǎn)也是缺點(diǎn),可以避免使用全局變量(全局變量污染導(dǎo)致應(yīng)用程序不可預(yù)測(cè)性),推薦使用私有
閉包函數(shù):將所在函數(shù)作用域中的變量長(zhǎng)期駐留在了內(nèi)存中。(內(nèi)存泄露 )
閉包的應(yīng)用場(chǎng)景:
1. 保護(hù)函數(shù)內(nèi)的變量的安全 2. 在內(nèi)存中維持一個(gè)變量 3. 通過(guò)閉包返回局部變量 4. 使用全局變量進(jìn)行累加和 5. 使用局部變量進(jìn)行累加和 6. 循環(huán)里的匿名函數(shù)的取值問(wèn)題
原型繼承
function Father(){}//構(gòu)造函數(shù) //原型屬性 Father.prototype.name = "李四"; Father.prototype.age = 24; //原型方法 Father.prototype.showName = function(){ return this.name; } Father.prototype.showAge = function(){ return this.age; } function Son(){} //原型鏈繼承 //Son.prototype = Father.prototype; //Son.prototype = new Father(); //遍歷父類(lèi)的原型 for(var i in Father.prototype){ Son.prototype[i] = Father.prototype[i]; } var son1 = new Son(); alert(son1.showName()); alert(son1.showAge());
經(jīng)典繼承
//構(gòu)造函數(shù) function Father(name,age,money){ //實(shí)例屬性 this.name = name; this.age = age; this.money = money; //實(shí)例方法 this.showName = function(){ return this.name; } this.showAge = function(){ return this.age; } this.showMoney = function(){ return this.money; } } function Son(name,age,money,sex){ //經(jīng)典繼承、偽裝繼承、冒充繼承(call,apply)只能繼承實(shí)例 //Father.apply(this,arguments); //Father.call(this,name,age,money); Father.apply(this,[name,age,money]); this.sex = sex; this.showSex = function(){ return this.sex; } } var son1 = new Son("張三",23,20000,"男"); alert(son1.showName()); alert(son1.showAge()); alert(son1.showMoney()); alert(son1.showSex());
call與aplly的異同:
1. 第一個(gè)參數(shù)this都一樣,指當(dāng)前對(duì)象 2. 第二個(gè)參數(shù)不一樣:call的是一個(gè)個(gè)的參數(shù)列表;apply的是一個(gè)數(shù)組(arguments也可以)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/92293.html
摘要:在上面的執(zhí)行中,只是又返回了一個(gè)新的對(duì)象,但是并沒(méi)有執(zhí)行新對(duì)象里面的屬性對(duì)應(yīng)的匿名函數(shù)喔,那就是沒(méi)有改變的值啊,所以你繼續(xù)也會(huì)輸出同樣的結(jié)果啊。 關(guān)于javascript中的閉包 我GitHub上的菜鳥(niǎo)倉(cāng)庫(kù)地址: 點(diǎn)擊跳轉(zhuǎn)查看其他相關(guān)文章 文章在我的博客上的地址: 點(diǎn)擊跳轉(zhuǎn) ? ? ? ? 其實(shí)關(guān)于閉包的定義,很多種說(shuō)法,而關(guān)于閉包的解釋?zhuān)嵌嗖粍贁?shù)了。很多說(shuō)得非常復(fù)雜,也有很多...
摘要:之前一篇文章我們?cè)敿?xì)說(shuō)明了變量對(duì)象,而這里,我們將詳細(xì)說(shuō)明作用域鏈。而的作用域鏈,則同時(shí)包含了這三個(gè)變量對(duì)象,所以的執(zhí)行上下文可如下表示。下圖展示了閉包的作用域鏈。其中為當(dāng)前的函數(shù)調(diào)用棧,為當(dāng)前正在被執(zhí)行的函數(shù)的作用域鏈,為當(dāng)前的局部變量。 showImg(https://segmentfault.com/img/remote/1460000008329355);初學(xué)JavaScrip...
摘要:之三關(guān)于閉包和遞歸開(kāi)篇這一期本來(lái)是打算寫(xiě)閉包的,但是無(wú)意中看到高級(jí)程序設(shè)計(jì)中閉包的前一章就是遞歸。閉包練習(xí)題這個(gè)板塊會(huì)實(shí)時(shí)補(bǔ)充的關(guān)于遞歸其實(shí)說(shuō)到遞歸,主要就是要說(shuō)這個(gè)的用法,其實(shí)主要就是調(diào)用自己的外圍函數(shù),并且可以傳參。 之三:關(guān)于閉包和遞歸 1. 開(kāi)篇 這一期本來(lái)是打算寫(xiě)閉包的,但是無(wú)意中看到《JavaScript高級(jí)程序設(shè)計(jì)》中閉包的前一章就是遞歸。所以拿出來(lái)一起講一下吧! 我覺(jué)得...
摘要:閉包解決的問(wèn)題獲取到函數(shù)內(nèi)部的變量讓變量不會(huì)隨著函數(shù)執(zhí)行完畢就銷(xiāo)毀而是保存在內(nèi)存中模擬私有變量閉包產(chǎn)生的問(wèn)題容易造成內(nèi)存泄漏,保存的多了,卻沒(méi)有釋放的指向問(wèn)題,在閉包里,指向的是關(guān)于閉包的小東西比如注釋部分省了外殼, 閉包概念:能夠訪問(wèn)另一個(gè)函數(shù)作用域的變量的函數(shù),來(lái)個(gè)栗子 showImg(https://segmentfault.com/img/bVbvnmY?w=604&h=245...
摘要:網(wǎng)上關(guān)于閉包的解釋有很多,大多都過(guò)于概念化,定義很精準(zhǔn)也很難看懂在說(shuō)什么。。首先貼一道經(jīng)典的閉包題理解閉包之前,我們要明確垃圾回收機(jī)制中關(guān)于引用次數(shù)的判斷,即當(dāng)引用對(duì)象的引用計(jì)數(shù)為的時(shí)候,表明此對(duì)象值可回收。 網(wǎng)上關(guān)于閉包的解釋有很多,大多都過(guò)于概念化,定義很精準(zhǔn)也很難看懂在說(shuō)什么。。首先貼一道經(jīng)典的閉包題:` function a(){ var b=0 return function...
閱讀 2489·2019-08-30 15:44
閱讀 1436·2019-08-30 13:01
閱讀 3459·2019-08-30 11:22
閱讀 3246·2019-08-29 15:23
閱讀 1776·2019-08-29 12:22
閱讀 3525·2019-08-26 13:58
閱讀 3589·2019-08-26 12:17
閱讀 3636·2019-08-26 12:16