国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript中幾個容易混淆的概念總結

2019-11-20 12:41:29
字體:
來源:轉載
供稿:網友

1.

var name = "The Window";var object = {name : "My Object",getName: function(){return this.name;}};

這里的getName()方法只簡單地返回this.name 的值。以下是幾種調用object.getName()的
方式以及各自的結果。
object.getName(); //"My Object"
(object.getName)(); //"My Object"
(object.getName = object.getName)(); //"The Window",在非嚴格模式下

第三種情況下(object.getName=object.getName);等價于var fn=(object.getName=object.getName);fn();

2.

function outputNumbers(count){for (var i=0; i < count; i++){//alert(i);}var i; //重新聲明變量alert(i); //計數}outputNumbers(5); 

JavaScript 從來不會告訴你是否多次聲明了同一個變量;遇到這種情況,它只會對后續的聲明視而不
見(不過,它會執行后續聲明中的變量初始化)。匿名函數可以用來模仿塊級作用域并避免這個問題。

3.

function(){//這里是塊級作用域}(); //出錯!

這段代碼會導致語法錯誤,是因為JavaScript 將function 關鍵字當作一個函數聲明的開始,而函
數聲明后面不能跟圓括號。然而,函數表達式的后面可以跟圓括號。要將函數聲明轉換成函數表達式,
只要像下面這樣給它加上一對圓括號即可。

(function(){//這里是塊級作用域})();

4.

function outputNumbers(count){(function () {for (var i=0; i < count; i++){alert(i);}})();alert(i); //導致一個錯誤!}

在這個重寫后的outputNumbers()函數中,我們在for 循環外部插入了一個私有作用域。在匿名
函數中定義的任何變量,都會在執行結束時被銷毀。因此,變量i 只能在循環中使用,使用后即被銷毀。
而在私有作用域中能夠訪問變量count,是因為這個匿名函數是一個閉包,它能夠訪問包含作用域中的
所有變量。

這種技術經常在全局作用域中被用在函數外部,從而限制向全局作用域中添加過多的變量和函數。
一般來說,我們都應該盡量少向全局作用域中添加變量和函數。在一個由很多開發人員共同參與的大型
應用程序中,過多的全局變量和函數很容易導致命名沖突。而通過創建私有作用域,每個開發人員既可
以使用自己的變量,又不必擔心搞亂全局作用域。例如:

(function(){var now = new Date();if (now.getMonth() == 0 && now.getDate() == 1){alert("Happy new year!");}})();

把上面這段代碼放在全局作用域中,可以用來確定哪一天是1 月1 日;如果到了這一天,就會向用
戶顯示一條祝賀新年的消息。其中的變量now 現在是匿名函數中的局部變量,而我們不必在全局作用域
中創建它。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南部县| 梨树县| 新安县| 雅安市| 宜城市| 邵东县| 卓资县| 禹州市| 友谊县| 凯里市| 寻乌县| 库车县| 图木舒克市| 托克逊县| 民勤县| 石家庄市| 介休市| 卢龙县| 富顺县| 莱芜市| 绥滨县| 雅江县| 万年县| 曲阜市| 兰州市| 青浦区| 小金县| 息烽县| 黄浦区| 固镇县| 永登县| 九寨沟县| 新沂市| 霍州市| 淳安县| 邢台市| 射阳县| 高淳县| 高淳县| 克什克腾旗| 文水县|