javascript中幾個(gè)容易混淆的概念總結(jié)
1.
var name = "The Window"; var object = { name : "My Object", getName: function(){ return this.name; } };
這里的getName()方法只簡(jiǎn)單地返回this.name 的值。以下是幾種調(diào)用object.getName()的
方式以及各自的結(jié)果。
object.getName(); //"My Object"
(object.getName)(); //"My Object"
(object.getName = object.getName)(); //"The Window",在非嚴(yán)格模式下
第三種情況下(object.getName=object.getName);等價(jià)于var fn=(object.getName=object.getName);fn();
2.
function outputNumbers(count){ for (var i=0; i < count; i++){ //alert(i); } var i; //重新聲明變量 alert(i); //計(jì)數(shù) } outputNumbers(5);
JavaScript 從來(lái)不會(huì)告訴你是否多次聲明了同一個(gè)變量;遇到這種情況,它只會(huì)對(duì)后續(xù)的聲明視而不
見(jiàn)(不過(guò),它會(huì)執(zhí)行后續(xù)聲明中的變量初始化)。匿名函數(shù)可以用來(lái)模仿塊級(jí)作用域并避免這個(gè)問(wèn)題。
3.
function(){ //這里是塊級(jí)作用域 }(); //出錯(cuò)!
這段代碼會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤,是因?yàn)镴avaScript 將function 關(guān)鍵字當(dāng)作一個(gè)函數(shù)聲明的開(kāi)始,而函
數(shù)聲明后面不能跟圓括號(hào)。然而,函數(shù)表達(dá)式的后面可以跟圓括號(hào)。要將函數(shù)聲明轉(zhuǎn)換成函數(shù)表達(dá)式,
只要像下面這樣給它加上一對(duì)圓括號(hào)即可。
(function(){ //這里是塊級(jí)作用域 })();
4.
function outputNumbers(count){ (function () { for (var i=0; i < count; i++){ alert(i); } })(); alert(i); //導(dǎo)致一個(gè)錯(cuò)誤! }
在這個(gè)重寫(xiě)后的outputNumbers()函數(shù)中,我們?cè)趂or 循環(huán)外部插入了一個(gè)私有作用域。在匿名
函數(shù)中定義的任何變量,都會(huì)在執(zhí)行結(jié)束時(shí)被銷(xiāo)毀。因此,變量i 只能在循環(huán)中使用,使用后即被銷(xiāo)毀。
而在私有作用域中能夠訪問(wèn)變量count,是因?yàn)檫@個(gè)匿名函數(shù)是一個(gè)閉包,它能夠訪問(wèn)包含作用域中的
所有變量。
這種技術(shù)經(jīng)常在全局作用域中被用在函數(shù)外部,從而限制向全局作用域中添加過(guò)多的變量和函數(shù)。
一般來(lái)說(shuō),我們都應(yīng)該盡量少向全局作用域中添加變量和函數(shù)。在一個(gè)由很多開(kāi)發(fā)人員共同參與的大型
應(yīng)用程序中,過(guò)多的全局變量和函數(shù)很容易導(dǎo)致命名沖突。而通過(guò)創(chuàng)建私有作用域,每個(gè)開(kāi)發(fā)人員既可
以使用自己的變量,又不必?fù)?dān)心搞亂全局作用域。例如:
(function(){ var now = new Date(); if (now.getMonth() == 0 && now.getDate() == 1){ alert("Happy new year!"); } })();
把上面這段代碼放在全局作用域中,可以用來(lái)確定哪一天是1 月1 日;如果到了這一天,就會(huì)向用
戶顯示一條祝賀新年的消息。其中的變量now 現(xiàn)在是匿名函數(shù)中的局部變量,而我們不必在全局作用域
中創(chuàng)建它。
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
相關(guān)文章
JS正則表達(dá)式驗(yàn)證賬號(hào)、手機(jī)號(hào)、電話和郵箱是否合法
這篇文章主要介紹了JS正則表達(dá)式驗(yàn)證賬號(hào)、手機(jī)號(hào)、電話和郵箱是否合法,需要的朋友可以參考下2017-03-03Bootstrap每天必學(xué)之柵格系統(tǒng)(布局)
Bootstrap每天必學(xué)之柵格系統(tǒng),小編對(duì)Bootstrap柵格系統(tǒng)(布局)也很陌生,特分享整理這篇文章,感興趣的小伙伴們可以參考一下2015-11-11利用JScript中運(yùn)算符"||"和"&&"的特殊特性實(shí)現(xiàn)代碼精
利用JScript中運(yùn)算符"||"和"&&"的特殊特性實(shí)現(xiàn)代碼精簡(jiǎn)...2007-03-03