首頁 > web前端 > js教程 > javascript中幾個容易混淆的概念總結_javascript技巧

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

WBOY
發布: 2016-05-16 16:04:18
原創
1276 人瀏覽過

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 現在是匿名函數中的局部變量,而我們不必在全域作用域
中創建它。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板