亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解析JavaScript模仿塊級作用域

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

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

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

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

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

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

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

使像下面這樣錯誤地重新聲明同一個變量,也不會改變它的值。

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

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

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

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

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

var count = 5;
outputNumbers(count);

這里初始化了變量count,將其值設(shè)置為5。當然,這里的變量是沒有必要的,因為可以把值直接傳給函數(shù)。為了讓代碼更簡潔,我們在調(diào)用函數(shù)時用5 來代替變量count,如下所示:

outputNumbers(5);

這樣做之所以可行,是因為變量只不過是值的另一種表現(xiàn)形式,因此用實際的值替換變量沒有問題。

再看下面的例子:

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

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

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

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

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

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

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

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

而在私有作用域中能夠訪問變量count,是因為這個匿名函數(shù)是一個閉包,它能夠訪問包含作用域中的所有變量。

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

相關(guān)文章

  • javaScript使用EL表達式的幾種方式

    javaScript使用EL表達式的幾種方式

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

    js貪心算法 錢幣找零問題代碼實例

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

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

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

    JS實戰(zhàn)例子之實現(xiàn)自動打字機動效

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

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

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

    一個簡單的JS鼠標懸停特效具體方法

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

    移動端js觸摸事件詳解

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

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

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

    原生js驗證簡潔注冊登錄頁面

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

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

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

最新評論