真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Javascript中的作用域及塊級(jí)作用域

一、塊級(jí)作用域的說(shuō)明

目前創(chuàng)新互聯(lián)公司已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、靈寶網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

在學(xué)習(xí)JavaScript的變量作用域之前,我們應(yīng)當(dāng)明確幾點(diǎn):

a、JavaScript的變量作用域是基于其特有的作用域鏈的。

b、JavaScript沒(méi)有塊級(jí)作用域。

c、函數(shù)中聲明的變量在整個(gè)函數(shù)中都有定義。

  javascript的變量作用域,與平時(shí)使用的類C語(yǔ)言不同,例如C#中的代碼:

static void Main(string[] args)
{
   if(true)
   {
    int number=10;
   }
  Console.WriteLine(number);
}

 這段代碼進(jìn)行編譯,是無(wú)法通過(guò)的,因?yàn)?當(dāng)前上下文不存在number".

  因?yàn)檫@里變量的作用域是由花括號(hào)限定的,稱為塊級(jí)作用域。

       在塊級(jí)作用域下,所有的變量都在定義的花括號(hào)內(nèi),從定義開始到花括號(hào)結(jié)束這個(gè)范圍內(nèi)可以使用,出了這個(gè)范圍就是無(wú)法訪問(wèn),也就是說(shuō)

if(true)
{
  int number=10;
  Console.WriteLine(number);
}

這樣可以訪問(wèn),因?yàn)樽兞康亩x與使用在同一個(gè)花括號(hào)內(nèi)。

但是在javascript中沒(méi)有塊級(jí)作用域的概念。

二、javascript中的作用域

 1、函數(shù)限定變量作用域

       在javascript中,函數(shù)里面定義的變量,,可以在函數(shù)里面被訪問(wèn),但在函數(shù)外無(wú)法訪問(wèn),代碼:

    代碼運(yùn)行時(shí),會(huì)拋出一個(gè)異常,變量number沒(méi)有定義,是因?yàn)槎x在函數(shù)中的變量無(wú)法再函數(shù)外使用,在函數(shù)內(nèi)可以任意使用,即使在賦值之前:

    這段代碼運(yùn)行后,不會(huì)拋出錯(cuò)誤,彈出兩次,分別是undefined和10

 2.子域訪問(wèn)父域

     函數(shù)可以限定變量的作用域,那么在函數(shù)中的函數(shù)就為該作用域的子域,在子域中的代碼可以訪問(wèn)到父域中的變量,代碼如下:

 這段代碼執(zhí)行得到的結(jié)果是10,但是在子域中訪問(wèn)父域的代碼也是有條件的

這段代碼比前面多了一個(gè)"var num=20;",這句代碼在子域中,那么子域訪問(wèn)父域的情況就發(fā)生了變化,這段代碼打印的結(jié)果是20,此時(shí)子域訪問(wèn)的num是子域中的變量,而不是父域中的。由此可見(jiàn)訪問(wèn)有一定規(guī)則可言,在javascript中使用變量,javascript解釋器首先在當(dāng)前作用域中搜索是否有該變量的定義,如果有,就是用這個(gè)變量,如果沒(méi)有就到父域中尋找變量,依次類推,直到最頂級(jí)作用域,仍然沒(méi)有找到就拋出異常"變量未定義",代碼如下:

這段代碼執(zhí)行后打印出20,如果將"var num=20"取掉,那么打印的就是10.同樣去掉"var num=10",那么就會(huì)出現(xiàn)未定義的錯(cuò)誤。

下面介紹下JS作用域與塊級(jí)作用域

作用域永遠(yuǎn)都是任何一門編程語(yǔ)言中的重中之重,因?yàn)樗刂浦兞颗c參數(shù)的可見(jiàn)性與生命周期。講到這里,首先理解兩個(gè)概念:塊級(jí)作用域與函數(shù)作用域。

什么是塊級(jí)作用域呢?

任何一對(duì)花括號(hào)({和})中的語(yǔ)句集都屬于一個(gè)塊,在這之中定義的所有變量在代碼塊外都是不可見(jiàn)的,我們稱之為塊級(jí)作用域。

函數(shù)作用域就好理解了(*^__^*) ,定義在函數(shù)中的參數(shù)和變量在函數(shù)外部是不可見(jiàn)的。

大多數(shù)類C語(yǔ)言都擁有塊級(jí)作用域,JS卻沒(méi)有。請(qǐng)看下文demo:

//C語(yǔ)言 
#include  
void main() 
{ 
  int i=2; 
  i--; 
  if(i) 
  { 
    int j=3; 
  } 
  printf("%d/n",j); 
} 

運(yùn)行這段代碼,會(huì)出現(xiàn)“use an undefined variable:j”的錯(cuò)誤??梢钥吹?,C語(yǔ)言擁有塊級(jí)作用域,因?yàn)閖是在if的語(yǔ)句塊中定義的,因此,它在塊外是無(wú)法訪問(wèn)的。 

而JS是如何表現(xiàn)的呢,再看另一個(gè)demo:

functin test(){ 
 for(var i=0;i<3;i++){   
 } 
 alert(i); 
} 
test(); 

 運(yùn)行這段代碼,彈出"3",可見(jiàn),在塊外,塊中定義的變量i仍然是可以訪問(wèn)的。也就是說(shuō),JS并不支持塊級(jí)作用域,它只支持函數(shù)作用域,而且在一個(gè)函數(shù)中的任何位置定義的變量在該函數(shù)中的任何地方都是可見(jiàn)的。 

那么我們?cè)撊绾问笿S擁有塊級(jí)作用域呢?是否還記得,在一個(gè)函數(shù)中定義的變量,當(dāng)這個(gè)函數(shù)調(diào)用完后,變量會(huì)被銷毀,我們是否可以用這個(gè)特性來(lái)模擬出JS的塊級(jí)作用域呢?看下面這個(gè)DEMO:

  function test(){ 
 (function (){ 
 for(var i=0;i<4;i++){ 
 } 
 })(); 
 alert(i); 
} 
test(); 

這時(shí)候再次運(yùn)行,會(huì)彈出"i"未定義的錯(cuò)誤,哈哈,實(shí)現(xiàn)了吧~~~這里,我們把for語(yǔ)句塊放到了一個(gè)閉包之中,然后調(diào)用這個(gè)函數(shù),當(dāng)函數(shù)調(diào)用完畢,變量i自動(dòng)銷毀,因此,我們?cè)趬K外便無(wú)法訪問(wèn)了。 

JS的閉包特性is the most important feature((*^__^*) 大家懂的)。在JS中,為了防止命名沖突,我們應(yīng)該盡量避免使用全局變量和全局函數(shù)。那么,該如何避免呢?不錯(cuò),正如上文demo所示,我們可以把要定義的所有內(nèi)容放入到一個(gè)

(function (){ 
//內(nèi)容 
})(); 

總結(jié)

以上所述是小編給大家介紹的Javascript中的作用域及塊級(jí)作用域,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!


當(dāng)前名稱:Javascript中的作用域及塊級(jí)作用域
分享路徑:http://weahome.cn/article/gojosh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部