麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JavaScript 自執行函數(閉包)

2019-11-06 06:03:03
字體:
來源:轉載
供稿:網友

1. 全局污染

在變量聲明的時候有一個規則:重復聲明無效var num = 123;var num = 'abc';重復聲明的代碼不會報任何錯誤,但是其聲明特征就沒有了,會轉換成普通賦值語句故,上述代碼與下面代碼等價var num = 123;num = 'abc';例:
<script src="jquery.js"></script><script>    var $ = function(selector){        return document.querySelectorAll(selector);//給$重新賦值了    };    $('div').CSS(...);//報錯,此時$('div')是nodeList類型,沒有css方法</script>

2. 閉包

起因:在函數內部聲明的數據,在函數外是不能夠直接訪問的。閉包含義:就是包裹、包裝的意思。閉表示封閉,即不可訪問。    所謂的閉包就是一個具有封閉的特性,同時具有包裹的特性的一種結構。    從代碼的角度說,所謂的閉包就是函數。① 函數內聲明的變量,外界無法訪問,即封閉性。② 函數本身又是一個封裝單位,利用函數可以封裝代碼,因此一個函數也是一個包裹結構。因此函數既有包裹的特性,也有封閉的特性,因此可以直接稱呼函數為閉包 (closure)凡是函數要執行,就會分配內存空間以供函數執行如果函數執行結束,內存會被釋放,即可以重復使用這個定義是有缺陷的。如果函數內部將數據的引用返回到外部,那么就可以保證數據被一直占用。
function foo(){    var num = 123;    function func(){        return num;    }    return func;}var f = foo(); // f指向func,foo不可以被釋放,因為func// num不能被釋放,因為f會返回該數據

3. 所謂的閉包就是函數,其特點是函數內定義的變量,在函數外是無法訪問的。

但是閉包需要解決的問題是如何間接的訪問到這些數據。如何訪問函數中的數據?① 最簡單的訪問方式:返回
function foo(){var num = 123;return num;}var res1 = foo();var res2 = foo();//但兩次訪問的并不是同一個數據② 多次訪問,f 只允許調用一次
var res1 = foo();var res2 = res1;③ 使得函數返回一個函數,利用函數返回數據
function f(){var num = 123;return function(){        //作用域訪問規則,是可以訪問num的    return num;    };}var foo = f();//先執行,只調用了一次var res1 = foo();//獲取num的值var res2 = foo();//訪問的是同一個值將2級鏈返回到0級鏈中,利用2級鏈可以訪問1級鏈的特性,使得0級鏈間接的訪問到1級鏈。因此這個數據是不能被銷毀的,即不能被釋放。小結:所謂的閉包,就是一個函數,因為函數中聲明的變量,外界無法訪問,函數就構成了封閉結構,因此成為閉包。同時如果需要訪問函數中的數據,可以考慮利用函數返回一個函數,使用返回的函數操作函數內的數據,以使得函數外可以通過這個函數內返回的函數,訪問內部的數據。4. 補充:內存釋放在 js 中凡是不被使用的數據,可以被釋放

5. 閉包的用法

(1)作為沙箱模式

沙箱:就是一個獨立的與外界隔離的運行環境(function)
(function(){    //此處的代碼,對外隔離,外界無法訪問,但是可以執行})();暴露方式:
var foo = (function(){function foo(){}    return foo;})();

(2)帶有緩存功能的函數

var func = (function(){    //私有數據    return function foo(){    };})();//func帶有私有數據遞歸中,為什么性能低?因為重復的太多了,將已經計算好的存儲起來,如果沒有計算,就遞歸,但是算完以后還是存起來。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄色一级视频 | 国产女厕一区二区三区在线视 | 成片免费观看视频大全 | 一本免费视频 | 草逼一区| 亚洲第一视频在线 | 免费a视频| 看免费黄色大片 | 精精国产xxxx视频在线野外 | 久久精品com | xnxx 日本免费 | 欧美国产一区二区三区 | 日韩av电影在线免费观看 | 国产精品亚洲欧美一级在线 | 羞羞视频免费观看网站 | 国产欧美日韩在线不卡第一页 | 精品久久久久久久久亚洲 | 精品国产乱码久久久久久久 | 国产亚洲精品成人 | 精品亚洲va在线va天堂资源站 | 色综合久久久久久久久久久 | 激情小视频在线观看 | 国产日本在线播放 | 操你逼 | 国产三级国产精品国产普男人 | 国产精品麻豆一区二区三区 | 中文字幕在线日韩 | 国产无遮挡一区二区三区毛片日本 | 伊人99re | 综合国产在线 | 自拍偷拍999 | av懂色 | 污黄视频在线观看 | 久草在线公开视频 | 欧美性生交xxxxx久久久 | 欧美日韩高清一区二区三区 | 最新se94se在线欧美 | 国产成人强伦免费视频网站 | 黄片毛片一级 | 欧美xxxwww| av电影网在线观看 |