最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript 變量作用域及閉包

 更新時間:2009年08月07日 22:57:34   作者:  
作用域JavaScript 的變量作用域是按照函數(shù)劃分的,為了快速的了解它的特性,我們通過實例來進行演示。

實例六:
復(fù)制代碼 代碼如下:

<script type="text/javascript">
window.onload = function(){
var i = 1;
function test(){
alert(i);
}
// 彈出內(nèi)容為 1 的提示框
test();
}
</script>

分析:
內(nèi)部函數(shù)可以訪問外部函數(shù)的變量,這個就引出了一個新的概念,那就是閉包。
閉包
什么是閉包呢,簡單的說就是一個函數(shù) A ,它的內(nèi)部函數(shù) B 可以訪問 A 內(nèi)定義的變量,即使函數(shù) A 已經(jīng)終止。下面通過實例進行了解。
實例七:
復(fù)制代碼 代碼如下:

<script type="text/javascript">
window.onload = function(){
var i = 1;
window.onunload = function(){
alert(i);
}
}
</script>

分析:
當(dāng)整個頁面加載完成時,會觸發(fā) onload 事件,這個onload 事件方法里給窗口的onunload 事件注冊了一個方法,這個方法里用到了onload 事件方法里聲明的變量,然后onload 事件方法運行結(jié)束,這時候我們點擊關(guān)閉窗口,會彈出內(nèi)容為1的提示框,說明onunload 的事件方法成功的調(diào)用了onload 事件方法里聲明的變量。
為了進一步了解閉包的特性,看下面的例子
實例八:
復(fù)制代碼 代碼如下:

<script type="text/javascript">
function initX(oarg){
// 定義一個變量
var x = oarg;
// 定義一個顯示變量的方法
var funGet = function(){
alert(x);
}
// 定義一個對變量進行修改的方法
var funSet = function(iarg){
x = iarg;
}
// 返回這兩個方法
return [funGet,funSet];
}
// 運行一個方法實例,返回值為包含 get 和 set 方法的數(shù)組
var funArr = initX(1);
// 得到 get 方法
var funGet = funArr[0];
// 得到 set 方法
var funSet = funArr[1];
// 運行 get 方法,顯示initX方法實例內(nèi)的 x 變量,結(jié)果為 1
funGet();
// 運行 set 方法,對initX方法實例內(nèi)的 x 變量進行賦值
funSet(2);
// 運行 get 方法,顯示initX方法實例內(nèi)的 x 變量,結(jié)果為 2
funGet();
</script>

分析:
當(dāng)內(nèi)部函數(shù)對外部函數(shù)定義的變量進行調(diào)用時,實際上引用的是這個變量的內(nèi)存塊,所以當(dāng)我們調(diào)用內(nèi)部函數(shù)時,引用的變量值是當(dāng)前這個變量的實際內(nèi)容。
閉包功能雖然強大,但是如果不注意,它也會給我們帶來困擾??聪旅娴睦印?
實例九:
復(fù)制代碼 代碼如下:

<button id="main">run</button>
<script type="text/javascript">
(function(){
var obj = document.getElementById("main");
var funArr = ['onclick','onkeypress'];
for(var i=0; i<funArr.length; i++){
var temp = funArr[i];
obj[temp] = function(){
alert(temp);
}
}
})();
</script>

寫代碼的原意是給 id 是 main 的按鈕注冊點擊事件和按鍵事件,事件的內(nèi)容是分別彈出事件名稱的提示框。但是結(jié)果有點匪夷所思,兩個事件的提示框全是 onkeypress,根據(jù)閉包的原理,我們仔細分析,就會發(fā)現(xiàn)當(dāng)兩個事件方法被調(diào)用時 temp 變量 指向的是 funArr[1] 的內(nèi)容,我們可以這樣修改來解決這個問題:
復(fù)制代碼 代碼如下:

<button id="main">run</button>
<script type="text/javascript">
(function(){
var obj = document.getElementById("main");
var funArr = ['onclick','onkeypress'];
for(var i=0; i<funArr.length; i++){
(function(){
var temp = funArr[i];
obj[temp] = function(){
alert(temp);
}
})();
}
})();
</script>

把 for 循環(huán)內(nèi)的代碼放入一個函數(shù)內(nèi),這樣,每循環(huán)一次都會產(chǎn)生一個函數(shù)實例,讓函數(shù)實例記錄 funArr 數(shù)組中的每個值,這樣就避免了上面碰到的問題。

相關(guān)文章

  • JS 循環(huán)li添加點擊事件 (閉包的應(yīng)用)

    JS 循環(huán)li添加點擊事件 (閉包的應(yīng)用)

    這篇文章主要介紹了js循環(huán)li添加點擊事件 (閉包的應(yīng)用)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • document.forms用法示例介紹

    document.forms用法示例介紹

    forms 返回一個集合包含了了當(dāng)前文檔中的所有form元素,下面通過示例為大家介紹下document.forms用法,需要的朋友可以參考下
    2014-06-06
  • 對于Javascript 執(zhí)行上下文的全面了解

    對于Javascript 執(zhí)行上下文的全面了解

    下面小編就為大家?guī)硪黄獙τ贘avascript 執(zhí)行上下文的全面了解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Cropper.js進階之裁剪后保存至服務(wù)器實現(xiàn)詳解

    Cropper.js進階之裁剪后保存至服務(wù)器實現(xiàn)詳解

    這篇文章主要為大家介紹了Cropper.js進階之裁剪后保存至服務(wù)器實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 微信小程序 image組件遇到的問題

    微信小程序 image組件遇到的問題

    這篇文章主要介紹了微信小程序 image組件遇到的問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • Vue2.0+ElementUI實現(xiàn)表格翻頁的實例

    Vue2.0+ElementUI實現(xiàn)表格翻頁的實例

    下面小編就為大家?guī)硪黄猇ue2.0+ElementUI實現(xiàn)表格翻頁的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • js獲取對象屬性值的兩種方法使用總結(jié)

    js獲取對象屬性值的兩種方法使用總結(jié)

    這篇文章主要給大家介紹了關(guān)于js獲取對象屬性值的兩種方法使用,分別是通過.獲取和通過[]獲取這兩種方法,文中介紹了詳細的方法和不同點,需要的朋友可以參考下
    2023-05-05
  • 詳解Javascript中的Object對象

    詳解Javascript中的Object對象

    這篇文章主要介紹了詳解Javascript中的Object對象,需要的朋友可以參考下
    2016-02-02
  • 使用JavaScript將PDF頁面中的標注扁平化的操作指南

    使用JavaScript將PDF頁面中的標注扁平化的操作指南

    扁平化(flatten)操作可以將標注作為矢量圖形包含在PDF頁面的內(nèi)容中,使其不可編輯,Dynamsoft Document Viewer是一個用于文檔掃描和查看的JavaScript SDK,可以添加標注、導(dǎo)出PDF,在本文中,我們將探討如何使用它,需要的朋友可以參考下
    2025-01-01
  • js日期時間格式化的方法實例

    js日期時間格式化的方法實例

    這篇文章主要給大家介紹了關(guān)于js日期時間格式化的相關(guān)資料,文中分別介紹了利用原生js以及Moment.js庫處理日期時間格式化的方法,需要的朋友可以參考下
    2021-07-07

最新評論

贵德县| 丹棱县| 昌乐县| 姚安县| SHOW| 彝良县| 余干县| 鄱阳县| 泌阳县| 菏泽市| 凤庆县| 永福县| 洛南县| 沁水县| 黎川县| 西安市| 陵川县| 循化| 依安县| 册亨县| 金秀| 额济纳旗| 黄冈市| 敦化市| 杨浦区| 佳木斯市| 全椒县| 广饶县| 额济纳旗| 宜君县| 新巴尔虎右旗| 吴川市| 灯塔市| 衡阳县| 南宫市| 镶黄旗| 孝昌县| 毕节市| 类乌齐县| 平和县| 裕民县|