日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

闭包 —JavaScript面向对象高级

發布時間:2023/12/9 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 闭包 —JavaScript面向对象高级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# 閉包 #

??我的理解:面試時,先說作用域鏈,再說閉包產生的原因,然后是垃圾回收GC,最后說閉包。

???????a.一個函數內部聲明的變量,就是它的私有變量.
???????b.在javascript中特性中,函數是可以訪問它所在作用域鏈的所有變量.
???????c.但函數外部是不能直接訪問函數內部的私有變量
???????D.通過函數內部再嵌套函數,子函數返回父函數的變量,就創建了一個閉包。

閉包的表現形式

??模塊化的本質:是通過函數的局部作用域特性來產生局部上下文來保存局部變量?

??1.函數作為返回值

????????function fn(){
??????????var count = 0;
??????????return function(){??//這句話是重點
?????????????count++;
?????????????console.log(count)
??????????}
???????}

????????var a = fn()
????????a();??//1
????????a();??//2
????????a();??//3
????????a();??//4????//a作為變量,是對fn()的引用,所以fn一直沒被釋放
????????a = fn()?????//對a重新賦值,重新把fn的引用給a 所以中間釋放過
????????a();??//1?????

??2.函數當做參數傳遞
???????
???????????var max = 10;
???????????var fn =function(x){
??????????????if(x>max){
????????????????console.log(x)
??????????????}
???????????}//max是自由變量,在fn定義好后就固定,所以max =10
???????????
???????????function fn1(f){
????????????var max = 100;
????????????f(15);
???????????}
????????
???????????fn1(fn) //15


??3.信息暴露和隱藏
????????
????????function fn(){
?????????var a = 10;
?????????var??b = [1,2,3,4];
?????????var count = 0;
?????????function addCount(){
?????????????count++
?????????};
?????????function getCount(){
????????????return count;
?????????}
????
?????????return {
???????????add:addCount,
???????????get:getCount
?????????}
???????//這里暴露出去的對象,只有兩個方法,而私有變量a 和 b沒有暴露,所以是保密的,可以選擇性的暴露????————模塊化 seajs就是這樣實現
???????}
????????var??a = fn(); //將引用給a

???4.異步回調
???????
???????
????// 閉包——異步回調
?????????function fn(){
?????????????var i = 0;
?????????????window.setInterval(function(){
??????????????????console.log(i++)
?????????????},1000);
?????????????console.log('prevent')???
?????????}
?????????fn()
?????
??????注意:setInterval()是典型的異步,fn在執行后,打印出'prevent',然后應該fn調用完成被銷毀,但是定時器依然在執行,所以fn依然還在。??
???????

轉載于:https://www.cnblogs.com/luowen075/p/6135869.html

總結

以上是生活随笔為你收集整理的闭包 —JavaScript面向对象高级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。