欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析JavaScript模仿塊級(jí)作用域

 更新時(shí)間:2016年12月29日 09:02:24   作者:依然仰望  
本文主要介紹了JavaScript模仿塊級(jí)作用域的方法,具有一定的參考價(jià)值。下面跟著小編一起來看下吧

javaScript 沒有塊級(jí)作用域的概念。這意味著在塊語句中定義的變量,實(shí)際上是在包含函數(shù)中而非語句中創(chuàng)建的,來看下面的例子:

function outputNumbers(count){
 for (var i=0; i < count; i++){
 alert(i);
 }
 alert(i); //計(jì)數(shù)
}

這個(gè)函數(shù)中定義了一個(gè)for 循環(huán),而變量i 的初始值被設(shè)置為0。

在Java、C++等語言中,變量i

只會(huì)在for 循環(huán)的語句塊中有定義,循環(huán)一旦結(jié)束,變量i 就會(huì)被銷毀。可是在JavaScrip 中,變量i

是定義在ouputNumbers()的活動(dòng)對(duì)象中的,因此從它有定義開始,就可以在函數(shù)內(nèi)部隨處訪問它。即

使像下面這樣錯(cuò)誤地重新聲明同一個(gè)變量,也不會(huì)改變它的值。

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

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

用作塊級(jí)作用域(通常稱為私有作用域)的匿名函數(shù)的語法如下所示:

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

以上代碼定義并立即調(diào)用了一個(gè)匿名函數(shù)。將函數(shù)聲明包含在一對(duì)圓括號(hào)中,表示它實(shí)際上是一個(gè)函數(shù)表達(dá)式。而緊隨其后的另一對(duì)圓括號(hào)會(huì)立即調(diào)用這個(gè)函數(shù)。如果有讀者感覺這種語法不太好理解,可以再看看下面這個(gè)例子:

var count = 5;
outputNumbers(count);

這里初始化了變量count,將其值設(shè)置為5。當(dāng)然,這里的變量是沒有必要的,因?yàn)榭梢园阎抵苯觽鹘o函數(shù)。為了讓代碼更簡(jiǎn)潔,我們?cè)谡{(diào)用函數(shù)時(shí)用5 來代替變量count,如下所示:

outputNumbers(5);

這樣做之所以可行,是因?yàn)樽兞恐徊贿^是值的另一種表現(xiàn)形式,因此用實(shí)際的值替換變量沒有問題。

再看下面的例子:

var someFunction = function(){
 //這里是塊級(jí)作用域
};
someFunction();

這個(gè)例子先定義了一個(gè)函數(shù),然后立即調(diào)用了它。定義函數(shù)的方式是創(chuàng)建一個(gè)匿名函數(shù),并把匿名函數(shù)賦值給變量someFunction。而調(diào)用函數(shù)的方式是在函數(shù)名稱后面添加一對(duì)圓括號(hào),即someFunction()。通過前面的例子我們知道,可以使用實(shí)際的值來取代變量count,那在這里是不是也可以用函數(shù)的值直接取代函數(shù)名呢? 然而,下面的代碼卻會(huì)導(dǎo)致錯(cuò)誤。

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

這段代碼會(huì)導(dǎo)致語法錯(cuò)誤,是因?yàn)镴avaScript 將function 關(guān)鍵字當(dāng)作一個(gè)函數(shù)聲明的開始,而函數(shù)聲明后面不能跟圓括號(hào)。然而,函數(shù)表達(dá)式的后面可以跟圓括號(hào)。要將函數(shù)聲明轉(zhuǎn)換成函數(shù)表達(dá)式,只要像下面這樣給它加上一對(duì)圓括號(hào)即可。

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

無論在什么地方,只要臨時(shí)需要一些變量,就可以使用私有作用域,例如:

function outputNumbers(count){
 (function () {
   for (var i=0; i < count; i++){
   alert(i);
  }
 })();
 alert(i); //導(dǎo)致一個(gè)錯(cuò)誤!
}

在這個(gè)重寫后的outputNumbers()函數(shù)中,我們?cè)趂or 循環(huán)外部插入了一個(gè)私有作用域。在匿名函數(shù)中定義的任何變量,都會(huì)在執(zhí)行結(jié)束時(shí)被銷毀。因此,變量i 只能在循環(huán)中使用,使用后即被銷毀。

而在私有作用域中能夠訪問變量count,是因?yàn)檫@個(gè)匿名函數(shù)是一個(gè)閉包,它能夠訪問包含作用域中的所有變量。

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • javaScript使用EL表達(dá)式的幾種方式

    javaScript使用EL表達(dá)式的幾種方式

    這篇文章主要介紹了javaScript如何使用EL表達(dá)式,有哪幾種不錯(cuò)的方式,需要的朋友可以參考下
    2014-05-05
  • js貪心算法 錢幣找零問題代碼實(shí)例

    js貪心算法 錢幣找零問題代碼實(shí)例

    這篇文章主要介紹了js貪心算法 錢幣找零問題代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Sublime Text 3常用插件及安裝方法

    Sublime Text 3常用插件及安裝方法

    這篇文章主要介紹了Sublime Text 3常用插件及安裝方法的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • JS實(shí)戰(zhàn)例子之實(shí)現(xiàn)自動(dòng)打字機(jī)動(dòng)效

    JS實(shí)戰(zhàn)例子之實(shí)現(xiàn)自動(dòng)打字機(jī)動(dòng)效

    什么是打字機(jī)效果呢?打字機(jī)效果即為文字逐個(gè)輸出,實(shí)際上就是一種Web動(dòng)畫,下面這篇文章主要給大家介紹了關(guān)于JS實(shí)戰(zhàn)例子之實(shí)現(xiàn)自動(dòng)打字機(jī)動(dòng)效的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 淺析微信小程序modal彈窗關(guān)閉默認(rèn)會(huì)執(zhí)行cancel問題

    淺析微信小程序modal彈窗關(guān)閉默認(rèn)會(huì)執(zhí)行cancel問題

    這篇文章主要介紹了小程序modal彈窗關(guān)閉默認(rèn)會(huì)執(zhí)行cancel方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 一個(gè)簡(jiǎn)單的JS鼠標(biāo)懸停特效具體方法

    一個(gè)簡(jiǎn)單的JS鼠標(biāo)懸停特效具體方法

    這個(gè)特效最終實(shí)現(xiàn)效果就是當(dāng)鼠標(biāo)移動(dòng)到鏈接上,文字會(huì)橫向移動(dòng)一定距離,貌似總有人喜歡這些花花草草。添加此效果方法很簡(jiǎn)單。
    2013-06-06
  • 移動(dòng)端js觸摸事件詳解

    移動(dòng)端js觸摸事件詳解

    這篇文章主要為大家詳細(xì)介紹了移動(dòng)端js觸摸事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • javascript 容錯(cuò)處理代碼(屏蔽js錯(cuò)誤)

    javascript 容錯(cuò)處理代碼(屏蔽js錯(cuò)誤)

    有時(shí)候大家來瀏覽網(wǎng)頁的時(shí)候發(fā)現(xiàn)IE瀏覽器左下角總有個(gè)黃色錯(cuò)誤標(biāo)志,有時(shí)候更是直接彈出錯(cuò)誤無法繼續(xù)瀏覽頁面,這樣對(duì)于網(wǎng)站的正規(guī)性與權(quán)威性發(fā)展不利。
    2010-04-04
  • 原生js驗(yàn)證簡(jiǎn)潔注冊(cè)登錄頁面

    原生js驗(yàn)證簡(jiǎn)潔注冊(cè)登錄頁面

    這篇文章主要為大家詳細(xì)介紹了原生js驗(yàn)證簡(jiǎn)潔美觀注冊(cè)登錄頁面的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • IE8 chrome中table隔行換色解決辦法

    IE8 chrome中table隔行換色解決辦法

    今天把項(xiàng)目生成好后,發(fā)布到萬維網(wǎng)上進(jìn)行測(cè)試,發(fā)現(xiàn)table的隔行換色在IE8,chorem中不能正常顯示。找了許多資料,CSS看樣是不能解決,只能用JS來控制了
    2010-07-07

最新評(píng)論