色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

JavaScript 中級筆記 第三章

3,作用域
所有的面向?qū)ο蟮恼Z言都有某種形式的作用域,JavaScript也不例外。在JavaScript里,作用域是由函數(shù)劃分的,而不是由塊(while,if之類的)來劃分的。
我們先來看一個(gè)簡單的作用域的例子。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
在if塊中,雖然foo的值改為“b“,但還是在全局作用域中,所以輸出結(jié)果是“b“。
基于瀏覽器的JavaScript語言有一門有趣的特性是,所有屬于全局作用域的變量都是window對象的屬性。
看下面代碼:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
我們再上例的基礎(chǔ)上,再添加一個(gè)函數(shù)來修改foo的值,代碼如下:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
結(jié)果也許有點(diǎn)另你意外,不過結(jié)果肯定是正確的。代碼②的結(jié)果是輸出 "b",而不是"c"。原因就是作用域有關(guān),雖然調(diào)用change()來改變foo的值,但是此時(shí)的改變只
在函數(shù)作用域內(nèi)起作用,并不會(huì)改變?nèi)肿饔糜騼?nèi)的foo的值。
如果想在change()函數(shù)內(nèi)修改全局的foo的值,我們可以去掉變量的聲明,例如:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
JavaScript中,如果變量沒有顯式定義,它就是全局定義的。所以調(diào)用change()后,會(huì)修改全局foo的值。最終輸出"c" 。
4,上下文對象
JavaScript中,代碼總是有一個(gè)上下文對象,代碼處于該對象之內(nèi)。上下文對象是通過this變量來體現(xiàn)的。這個(gè)變量永遠(yuǎn)指向當(dāng)前代碼所處的對象中。
全局對象其實(shí)是window對象的屬性。
接下來,我們看一個(gè)上下文對象的例子。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
再此基礎(chǔ)上,我們再看一個(gè)例子:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
本例中,我們把obj.hide變量的上下文對象變?yōu)閣indow對象時(shí),代碼寫得并不好理解。幸運(yùn)的是,JavaScript提供了一套更好的方法來解決。
現(xiàn)在我們有請call和apply兩位先生上場,通過它們也可以完成同樣的功能。先看call:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
通過obj.hide.call(window),我們將此時(shí)的上下文對象改為window對象。call方法的第一個(gè)參數(shù)就是上下文對象。
call方法也可以傳遞更多的參數(shù),如下所示:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
另外apply方法跟call類型,它的第一個(gè)參數(shù)也是上下文對象,不過后面的參數(shù)則是一個(gè)數(shù)組。如下所示:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
最后我們來看一個(gè)通過上下文,call和apply結(jié)合的例子。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
在setBodyColor函數(shù)中,apply的第二個(gè)參數(shù)是數(shù)組,而前面我們講過,arguments 也是一個(gè)偽數(shù)組,那么它們2個(gè)能聯(lián)系起來嗎?
把 changeColor.apply( document.body , ["blue"]); 改為 changeColor.apply( document.body , arguments );,
然后給setBodyColor();函數(shù)傳參數(shù)。如下代碼所示:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
通過這些例子,你也許對上下文的概念比較熟悉了。上下文在面向?qū)ο蟮木幊讨蟹浅V匾?

JavaScript技術(shù)JavaScript 中級筆記 第三章,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 化德县| 桦南县| 大邑县| 灵璧县| 香格里拉县| 尉犁县| 囊谦县| 栖霞市| 惠来县| 容城县| 兰西县| 隆子县| 堆龙德庆县| 哈尔滨市| 天台县| 连江县| 卓尼县| 松阳县| 文化| 武义县| 阳春市| 弥渡县| 牡丹江市| 常宁市| 兴安盟| 南投县| 红桥区| 旌德县| 高要市| 平利县| 石家庄市| 黄骅市| 米脂县| 阳朔县| 大石桥市| 余干县| 茶陵县| 景谷| 宜宾市| 灵璧县| 宿州市|