最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript中的作用域及塊級作用域

 更新時間:2017年12月08日 11:43:55   投稿:mrr  
作用域永遠都是任何一門編程語言中的重中之重,因為它控制著變量與參數(shù)的可見性與生命周期。下面給大家介紹Javascript中的作用域及塊級作用域,需要的朋友參考下吧

一、塊級作用域的說明

在學習JavaScript的變量作用域之前,我們應(yīng)當明確幾點:

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

b、JavaScript沒有塊級作用域。

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

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

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

 這段代碼進行編譯,是無法通過的,因為"當前上下文不存在number".

  因為這里變量的作用域是由花括號限定的,稱為塊級作用域。

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

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

這樣可以訪問,因為變量的定義與使用在同一個花括號內(nèi)。

但是在javascript中沒有塊級作用域的概念。

二、javascript中的作用域

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

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

<script type="text/javascript">
  var num=function()
  {
   var number=10;
  };
  try{
    alert(number);
  }catch(e)
  {
    alert(e);
  } 
</script>

    代碼運行時,會拋出一個異常,變量number沒有定義,是因為定義在函數(shù)中的變量無法再函數(shù)外使用,在函數(shù)內(nèi)可以任意使用,即使在賦值之前:

<script type="text/javascript">
 var num=function(){
    alert(number);
    var number=10;
    alert(number);
 };
 try{
   num();
 }catch(e){
  alert(e);
 }
</script>

    這段代碼運行后,不會拋出錯誤,彈出兩次,分別是undefined和10

 2.子域訪問父域

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

<script type="text/javascript">
 var func=function(){
    var number=10;
    var sub_func=function(){
      alert(num);
    };
   sub_func();
};
func();
</script>

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

<script type="text/javascript">
 var func=function(){
    var number=10;
    var sub_func=function(){
      var num=20;
      alert(num);
    };
   sub_func();
};
func();
</script>

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

<script type="text/javascript">
 (function (){
   var num=10;
   (function (){
     var num=20;
     (function(){
     alert(num);
      })();
   })();
  })();
</script>

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

下面介紹下JS作用域與塊級作用域

作用域永遠都是任何一門編程語言中的重中之重,因為它控制著變量與參數(shù)的可見性與生命周期。講到這里,首先理解兩個概念:塊級作用域與函數(shù)作用域。

什么是塊級作用域呢?

任何一對花括號({和})中的語句集都屬于一個塊,在這之中定義的所有變量在代碼塊外都是不可見的,我們稱之為塊級作用域。

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

大多數(shù)類C語言都擁有塊級作用域,JS卻沒有。請看下文demo:

//C語言 
#include <stdio.h> 
void main() 
{ 
  int i=2; 
  i--; 
  if(i) 
  { 
    int j=3; 
  } 
  printf("%d/n",j); 
} 

運行這段代碼,會出現(xiàn)“use an undefined variable:j”的錯誤。可以看到,C語言擁有塊級作用域,因為j是在if的語句塊中定義的,因此,它在塊外是無法訪問的。 

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

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

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

那么我們該如何使JS擁有塊級作用域呢?是否還記得,在一個函數(shù)中定義的變量,當這個函數(shù)調(diào)用完后,變量會被銷毀,我們是否可以用這個特性來模擬出JS的塊級作用域呢?看下面這個DEMO:

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

這時候再次運行,會彈出"i"未定義的錯誤,哈哈,實現(xiàn)了吧~~~這里,我們把for語句塊放到了一個閉包之中,然后調(diào)用這個函數(shù),當函數(shù)調(diào)用完畢,變量i自動銷毀,因此,我們在塊外便無法訪問了。 

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

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

總結(jié)

以上所述是小編給大家介紹的Javascript中的作用域及塊級作用域,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • DOM中事件處理概覽與原理的全面解析

    DOM中事件處理概覽與原理的全面解析

    這篇文章主要為大家詳細解析了DOM中事件處理概覽與原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 使用console進行性能測試

    使用console進行性能測試

    各大瀏覽器內(nèi)置的開發(fā)工具,都提供了一個console對象。它主要有兩個作用:顯示網(wǎng)頁代碼運行時的錯誤信息。提供了一個命令行接口,用來與網(wǎng)頁代碼互動。下面我們就來詳細研究下如何使用console進行性能測試。
    2015-04-04
  • javaScript實現(xiàn)游戲倒計時功能

    javaScript實現(xiàn)游戲倒計時功能

    這篇文章主要為大家詳細介紹了javaScript實現(xiàn)游戲倒計時功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • js event事件的傳遞與冒泡處理

    js event事件的傳遞與冒泡處理

    與Netscape相反,IE中的事件傳遞方向是從事情發(fā)生的對象開始,然后依次由該對象向所在的父節(jié)點傳遞。
    2009-12-12
  • JS圖片預(yù)加載 JS實現(xiàn)圖片預(yù)加載應(yīng)用

    JS圖片預(yù)加載 JS實現(xiàn)圖片預(yù)加載應(yīng)用

    由于圖片加載慢,導(dǎo)致用戶體驗特別差,本文將介紹一種圖片預(yù)加載技術(shù),需要了解的朋友可以參考下
    2012-12-12
  • js之如何篩選出兩個數(shù)組相同的值

    js之如何篩選出兩個數(shù)組相同的值

    這篇文章主要介紹了js之如何篩選出兩個數(shù)組相同的值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • JS數(shù)組方法push()、pop()用法實例分析

    JS數(shù)組方法push()、pop()用法實例分析

    這篇文章主要介紹了JS數(shù)組方法push()、pop()用法,結(jié)合實例形式分析了JavaScript數(shù)組push()與pop()方法基本功能、原理、使用方法與操作注意事項,需要的朋友可以參考下
    2020-01-01
  • JS從數(shù)組中隨機取出幾個數(shù)組元素的方法

    JS從數(shù)組中隨機取出幾個數(shù)組元素的方法

    JS如何從一個數(shù)組中隨機取出一個元素或者幾個元素呢?其實方法很簡單,下面小編給大家分享了JS隨機取出幾個數(shù)組元素的方法,非常不錯,需要的朋友參考下
    2016-08-08
  • JavaScript實現(xiàn)可拖動模態(tài)框

    JavaScript實現(xiàn)可拖動模態(tài)框

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)可拖動模態(tài)框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Postman參數(shù)化實現(xiàn)過程及原理解析

    Postman參數(shù)化實現(xiàn)過程及原理解析

    這篇文章主要介紹了Postman參數(shù)化實現(xiàn)過程及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08

最新評論

中宁县| 德令哈市| 仲巴县| 海城市| 桂林市| 陆川县| 泌阳县| 饶河县| 西贡区| 凉山| 玉溪市| 德化县| 耿马| 三穗县| 萨迦县| 禹城市| 呼玛县| 凤山县| 玛多县| 伊春市| 渑池县| 田阳县| 广宗县| 宝应县| 信宜市| 沙坪坝区| 景德镇市| 青海省| 同德县| 错那县| 黄平县| 富蕴县| 延川县| 湘阴县| 沅陵县| 青阳县| 吉林省| 廊坊市| 贡觉县| 鹤峰县| 额尔古纳市|