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

ECMAScript 閉包(closure)

ECMAScript 最易讓人誤解的一點是,它支持閉包(closure)。

閉包,指的是詞法表示包括不被計算的變量的函數(shù),也就是說,函數(shù)可以使用函數(shù)之外定義的變量。

簡單的閉包實例

在 ECMAScript 中使用全局變量是一個簡單的閉包實例。請思考下面這段代碼:

var sMessage = "hello world";

function sayHelloWorld() {
  alert(sMessage);
}

sayHelloWorld();

在上面這段代碼中,腳本被載入內(nèi)存后,并沒有為函數(shù) sayHelloWorld() 計算變量 sMessage 的值。該函數(shù)捕獲 sMessage 的值只是為了以后的使用,也就是說,解釋程序知道在調(diào)用該函數(shù)時要檢查 sMessage 的值。sMessage 將在函數(shù)調(diào)用 sayHelloWorld() 時(最后一行)被賦值,顯示消息 "hello world"。

復(fù)雜的閉包實例

在一個函數(shù)中定義另一個會使閉包變得更加復(fù)雜。例如:

var iBaseNum = 10;

function addNum(iNum1, iNum2) {
  function doAdd() {
    return iNum1 + iNum2 + iBaseNum;
  }
  return doAdd();
}

這里,函數(shù) addNum() 包括函數(shù) doAdd() (閉包)。內(nèi)部函數(shù)是一個閉包,因為它將獲取外部函數(shù)的參數(shù) iNum1 和 iNum2 以及全局變量 iBaseNum 的值。 addNum() 的最后一步調(diào)用了 doAdd(),把兩個參數(shù)和全局變量相加,并返回它們的和。

這里要掌握的重要概念是,doAdd() 函數(shù)根本不接受參數(shù),它使用的值是從執(zhí)行環(huán)境中獲取的。

可以看到,閉包是 ECMAScript 中非常強大多用的一部分,可用于執(zhí)行復(fù)雜的計算。

提示:就像使用任何高級函數(shù)一樣,使用閉包要小心,因為它們可能會變得非常復(fù)雜。

交口县| 荆州市| 自治县| 阿拉善左旗| 弥渡县| 东乡族自治县| 金昌市| 安乡县| 夏邑县| 娱乐| 昭通市| 三穗县| 新郑市| 诸城市| 潮安县| 临泉县| 新化县| 保定市| 库车县| 武强县| 贵溪市| 惠来县| 中方县| 高州市| 丹棱县| 新干县| 运城市| 徐汇区| 康平县| 法库县| 荆门市| 泾阳县| 新津县| 浦县| 内丘县| 长沙市| 临清市| 景宁| 修水县| 洞口县| 永安市|