(1)我們常說的閉包就是函式巢狀函式,內部函式可以引用外部函式的引數和變數 【**如下】
(2)會涉及到js中的垃圾**機制(指:當函式執行完時,函式的變數將會收回,閉包就不一樣了) 【**如下】
(3)閉包中當外部函式載入完時,外部函式的變數內部函式還可以繼續使用,不會** 【**如下】
(4)閉包的好處
①將乙個變數長期駐紮在記憶體中 【**如下】
②避免全域性變數對函式的汙染 【**如下】
③私有成員的存在 【**如下】
(5)閉包的用法 【**如下】
①模組化** 【**如下】
②在迴圈中直接找到對應元素的索引 【**如下】
(1) or example (1)
輸出: ruanjiang
(2) or example
//js中正常函式
function
one()
one();
//輸出ruanjiang
function
two()
two();
//輸出為空
(3) for example (1)(2)(3)(4)①②
//js原全域性變數的汙染
var a=1;//
為全域性變數
function
one()
one();
//、2
one(); //
3 alert(a);//
函式外部可引用a
//垃圾**機制
function
one1()
one1();
//、2
one1(); //
、2//
閉包function
one2()
}var b =one2();
b(); //2
b(); //
/3 alert(a);//
a為空 表示a為區域性變數
(4) for example (4)③ (5)①
//函式宣告函式diaoyong
function
one()
one();
//函式表示式
(function
one1())(); //
模組化**
var one2=(function
() })();
one2(); //3
one2(); //5//
私有成員 方法函式
var one3=(function
()
function aaa()
return
})();
one3.b(); //2
one3.c(); //7//
alert(a); not defind
//alert(bbb); not defind
//alert(ccc); not defind
(5)for example (5)②
方法一輸出結果:點選點乙個li輸出這是一樓0,點選第二個li輸出這是一樓1,以此類推
方法二
window.onload = function() })(i);
}}
//閉包在ie下可能會引起記憶體洩漏
//js的物件屬性(odiv.onclick)引誘內部的時候(odiv.id),內部又應有外部物件,就會引起
window.onload = function
() }
//解決方法一,當window.onload出現時將事件取消
window.onunload = function
()
//方法二
window.onload = function
();
odiv = null
;
};
詳解JS閉包概念
閉包理解 1.如何產生閉包?當乙個巢狀的內部 子 函式引用了巢狀的外部 父 函式的變數 函式 時,產生閉包 2.閉包到底是什麼?使用 chrome 除錯檢視 理解一 閉包是巢狀的內部函式 絕大部分人 理解二 包含被引用變數 函式 的物件 極少數人 注意 閉包存在於巢狀的內部函式中 3.產生閉包的條件...
簡單描述js閉包概念
簡單的描述閉包 如果在函式func內部宣告函式inner,然後在函式外部呼叫inner,這個過程即產生了乙個閉包。實現函式 makeclosures,呼叫之後滿足如下條件 1 返回乙個函式陣列 result,長度與 arr 相同 2 執行 result 中第 i 個函式,即 result i 結果與...
js 閉包的用法詳解
實現可重用的區域性變數,且保護其不受汙染的機制。外層函式包裹受保護的變數和內層函式。內層函式專門負責操作外層函式的區域性變數。將內層函式返回到外層函式外部,反覆呼叫。子函式會一級一級地向上尋找所有父函式的變數。所以,父函式的所有變數,對子函式都是可見的,反之則不成立。外層函式呼叫了幾次,就有幾個受保...