gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

es6有閉包嗎

es6有閉包。在es6中,在一個函數內部創建另一個函數,把內嵌的函數稱為閉包,它可以訪問外部函數的局部變量;簡單來說,閉包指有權訪問另一個函數作用域中變量的函數。閉包的主要作用:延伸了變量的作用范圍。由于閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。

es6有閉包嗎

前端(vue)入門到精通課程:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

本教程操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

一、變量作用域

變量根據作用域的不同分為兩種:全局變量和局部變量。

  • 函數內部可以使用全局變量。

  • 函數外部不可以使用局部變量。

  • 當函數執行完畢,本作用域內的局部變量會銷毀。

二、什么是閉包?

在es6中,閉包(closure)指有權訪問另一個函數作用域中變量的函數。簡單理解:一個作用域可以訪問另外一個函數內部的局部變量。

閉包:在一個函數內部創建另一個函數,把內嵌的函數稱為閉包,它可以訪問外部函數的局部變量

	// fun 這個函數作用域 訪問了另外一個函數 fn 里面的局部變量 num     function fn(){         let num = 10         function fun(){             console.log(num)         }         fun()     }     fn() //10
登錄后復制

閉包的主要作用:延伸了變量的作用范圍。

	// fn 外面的作用域可以訪問fn 內部的局部變量     function fn(){         let num = 10         // 方法一: 先定義再返回函數         function fun(){             console.log(num)         }         return fun //返回 fun函數     }     let f = fn()     f() //10
登錄后復制

	// fn 外面的作用域可以訪問fn 內部的局部變量     function fn(){         let num = 10         // 方法二: 直接返回函數         return function(){             console.log(num)         }     }     let f = fn()     f() //10
登錄后復制

三、閉包的使用場景

(1)用來返回值

//以閉包的形式將 name 返回 function fun(){     let name = 'woniu'      //定義閉包     return function f1(){         return name     } }  let ft = fun() //因為fun函數的返回值是f1函數,ft實質是一個函數  let na = ft()  //調用ft函數,實際調用的就是f1函數 console.log(na); //woniu
登錄后復制

(2)函數賦值:在函數內部定義函數表達式

var f2 function fn(){     let name = '曹操'     f2 = function(){ //閉包,將外部函數的name變量作為閉包的返回值         return name     } } fn() //必須先調用fn函數,否則f2不是一個函數 console.log(f2());  //曹操
登錄后復制

(3)把閉包作為函數的參數

function fn(){     let name = '蝸牛學苑'      //定義閉包     return function callback(){         return name     } }  let f1 = fn() //將fn函數的返回值callback賦給f1 function f2(temp){     console.log(temp()) //輸出temp函數的返回值,實際調用了閉包callback } //調用f2函數:將f1作為實參傳遞給temp f2(f1)
登錄后復制

(4)立即執行函數中使用閉包

//立即執行函數 (function(){     let name = '蝸牛學苑'     let f1 = function(){         return name     }      fn2(f1) //調用fn2函數,將閉包f1作為實參傳遞給fn2函數 })()  function fn2(temp){  //temp是一個形參,接收f1     console.log(temp()); //對temp的調用,實際調用的是閉包f1 }
登錄后復制

(5)循環賦值

(function(){     for (let i = 1; i <= 10; i++) {         (             function(j){                 setTimeout(function(){                     console.log(j);                 },j*1000)             }         )(i)     } })()
登錄后復制

(6)將閉包封裝到對象中

function fun(){     let name = '蝸牛學苑'     setName = function(na){ //setName是閉包,用來設置外部函數的變量值         name = na     }     getName = function(){ //getName是閉包,用來返回外部函數的變量值         return name      }      //外部fun函數的返回值,將閉包封裝到對象中返回     return {         setUserName:setName,         getUserName:getName     } } let obj =fun() //將fun函數返回值(對象)賦給obj console.log('用戶名:',obj.getUserName()) //蝸牛學苑 obj.setUserName('石油學苑') console.log('用戶名:',obj.getUserName()) //石油學苑
登錄后復制

(7)通過閉包實現迭代

let arr = ['aa','bb','cc'] function fn(temp){ //外部函數的返回值是閉包     let i = 0     //定義閉包:迭代獲取數組元素并返回     return function(){         return temp[i++] || '數組已經遍歷結束'     } }  let f1 = fn(arr) console.log(f1()) //aa console.log(f1()) //bb console.log(f1()) //cc console.log(f1()) //數組已經遍歷結束
登錄后復制

(8)、首次區分(相同的參數,函數不會重復執行)

var fn = (function(){     var arr = [] //用來緩存的數組     return function(val){         if(arr.indexOf(val) == -1){ //緩存中沒有則表示需要執行             arr.push(val) //將參數push到緩存數組中             console.log('函數被執行了',arr);  //這里寫想要執行的函數         } else {             console.log('此次函數不需要執行');         }         console.log('函數調用完打印一下,方便查看緩存的數組:',arr);     } })()  fn(10) fn(10) fn(1000) fn(20) fn(1000)
登錄后復制

注意

(1)搞清除誰是閉包函數

(2)分清楚閉包的返回值、外部函數的返回值

四、閉包總結

  • 閉包是什么:閉包是一個函數(一個作用域可以訪問另外一個函數的局部變量)。

  • 閉包的作用是什么:延伸變量的作用范圍。

沒有產生閉包,因為并沒有局部變量,所以訪問到的是全局變量 The Window

let name = 'The Window'     let object = {         name: 'My Object',         getNameFunc(){             return function(){                 return this.name             }         }     }     let f = object.getNameFunc()     console.log(f()) //The Window
登錄后復制

產生了閉包:因為 this 在函數內部被賦值給了 that,指向的是 object 這個對象。

	let name = 'The Window'     let object = {         name: 'My Object',         getNameFunc(){             let that = this             return function(){                return that.name             }         }     }     let f = object.getNameFunc()     console.log(f()) //My Object
登錄后復制

使用閉包的注意點

1)由于閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變量全部刪除。

2)閉包會在父函數外部,改變父函數內部變量的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變量當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變量的值。

【推薦學習:javascript視頻教程】

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
激情视频小说图片| 日韩一级片免费视频| 15—17女人毛片| 亚洲欧美天堂在线| 黄页网站大全在线观看| 国产青青在线视频| 国产探花在线观看视频| 男女激情无遮挡| 日本黄xxxxxxxxx100| 国产成人无码av在线播放dvd| 一本色道久久亚洲综合精品蜜桃| 99999精品| 女人另类性混交zo| 亚洲不卡中文字幕无码| 五月激情婷婷在线| 欧美日韩在线中文| www.国产在线播放| 丰满人妻一区二区三区53号| 北条麻妃av高潮尖叫在线观看| 中文字幕一区二区三区四| 99re精彩视频| 国产精品乱码久久久久| www.中文字幕在线| 日韩视频免费播放| 久久久久久人妻一区二区三区| 老司机久久精品| xxx中文字幕| 成年人网站av| 国产手机视频在线观看| 伊人久久在线观看| 日日碰狠狠添天天爽超碰97| 国产日韩欧美精品在线观看| 国产原创中文在线观看| 丰满爆乳一区二区三区| 91蝌蚪视频在线观看| 最新中文字幕2018| 中文字幕第66页| 男人添女人下部高潮视频在观看| 福利视频一二区| 天天插天天操天天射| 欧美在线a视频| 亚洲熟妇av一区二区三区| 911福利视频| 日韩av片在线看| 欧美激情第一区| 国产主播在线看| 咪咪色在线视频| 亚洲三级视频网站| 日本五级黄色片| 一本之道在线视频| 日韩中文字幕组| 免费一级特黄特色毛片久久看| 日韩精品一区二区三区不卡 | 久久久亚洲精品无码| 在线观看国产福利| 不卡影院一区二区| 久操手机在线视频| 97碰在线视频| 992tv快乐视频| 激情成人开心网| 青青草综合视频| 久久精品无码中文字幕| 玖玖精品在线视频| 成人在线免费观看视频网站| 日本不卡一区二区三区四区| 无套内谢丰满少妇中文字幕| 手机av在线网| 视色,视色影院,视色影库,视色网| 日本久久久久久久久久久久| 天天爱天天操天天干| 三上悠亚av一区二区三区| 中文字幕一区二区三区四区在线视频| 欧美一区二区激情| 嫩草av久久伊人妇女超级a| 久久精品.com| 午夜影院免费版| 中文字幕日韩精品无码内射| 国产极品粉嫩福利姬萌白酱| 日韩一级理论片| 日韩最新中文字幕| 午夜精品久久久久久久无码| av免费网站观看| 自拍偷拍视频在线| 久久久久人妻精品一区三寸| 在线观看免费视频污| 国产精品丝袜久久久久久消防器材| 国产精品97在线| www成人免费| 老司机午夜性大片| 男人操女人免费| 日本三级免费网站| 久久www视频| 免费看av软件| 天堂av2020| 欧美性受xxxxxx黑人xyx性爽| 国产手机免费视频| 精品成在人线av无码免费看| 国产传媒免费观看| 亚洲欧美日韩一二三区| 国产精品久久久毛片| 999精彩视频| 中文字幕网av| 91蝌蚪视频在线| 国产高清精品软男同| youjizz.com亚洲| 手机看片日韩国产| 蜜桃视频一区二区在线观看| 少妇熟女一区二区| wwwwww欧美| 男人日女人逼逼| 日韩av片网站| 男插女免费视频| www.成年人视频| 丝袜制服一区二区三区| www.国产视频.com| 日本欧美视频在线观看| 国产精品免费成人| 青青草免费在线视频观看| 8x8x华人在线| 日韩av资源在线| 超碰超碰超碰超碰超碰| 超碰影院在线观看| 在线成人免费av| 在线观看免费不卡av| 国产a级片网站| 亚洲欧美日本一区二区| 黄色一级片在线看| 在线观看污视频| 美女在线视频一区二区| 不卡影院一区二区| 久久精品xxx| 激情成人开心网| 青春草在线视频免费观看| 91蝌蚪视频在线观看| 日韩美女爱爱视频| 免费成人深夜夜行网站视频| 国产成人久久777777| 懂色av粉嫩av蜜臀av| 农民人伦一区二区三区| 男人天堂a在线| 日韩av手机版| 成人免费视频91| 我要看一级黄色大片| 欧美 日韩 亚洲 一区| 精品www久久久久奶水| 免费看日本黄色| 99在线免费视频观看| 久久亚洲a v| 黄色国产精品视频| 91热这里只有精品| 又色又爽又黄视频| 狠狠精品干练久久久无码中文字幕| 欧美一级小视频| 天堂…中文在线最新版在线| 精品欧美一区免费观看α√| 搡女人真爽免费午夜网站| 欧美自拍小视频| 91网址在线观看精品| 六月丁香婷婷激情| 一本一道久久a久久综合蜜桃| 国产又粗又长又爽又黄的视频| 国产精品igao网网址不卡| 人人妻人人澡人人爽欧美一区 | www午夜视频| 日韩亚洲欧美视频| 亚洲热在线视频| 日本一本二本在线观看| 麻豆一区二区三区在线观看| ww国产内射精品后入国产| 天天色天天干天天色| 日本在线视频www| 国产h视频在线播放| 成年人三级视频| 欧美视频亚洲图片| 三上悠亚av一区二区三区| 缅甸午夜性猛交xxxx| h无码动漫在线观看| 国产系列第一页| 久久久国产精华液999999| 免费一级特黄特色毛片久久看| 欧美 另类 交| 国产小视频免费| 国产精品久久中文字幕| 久久综合色视频| 日韩久久一级片| 17c国产在线| 最新视频 - x88av| 喜爱夜蒲2在线| 男人和女人啪啪网站| 久久久久免费精品| 亚洲少妇久久久| 国产黄色激情视频| 久久精品国产精品亚洲色婷婷| 国产综合免费视频| 伊人成人免费视频| 久久久久久久久久久99| 粉嫩虎白女毛片人体| 无码毛片aaa在线| 久久精品99国产| 国产a级黄色大片|