国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JAVASCRIPT函數作用域和提前聲明 分享

2024-05-06 15:51:00
字體:
來源:轉載
供稿:網友
這篇文章介紹了JAVASCRIPT函數作用域和提前聲明,有需要的朋友可以參考一下

一些語言如C、java都有塊級作用域,即花括號內的每一段代碼都具有各自的作用域,而且變量在聲明它們的代碼段之外是不可見的,但是javascript沒有塊級作用域。javascript使用函數作用域,即變量在聲明它們的函數體以及這個函數體嵌套的任意函數體內都是有定義的,也即函數內聲明的所有變量在函數體內始終是可見的。這樣就意味著變量在聲明之前就可以使用,這個特性被稱為"聲明提前",即javascript函數里聲明的所有變量都被提前至函數的頂部。來看個例子。

復制代碼 代碼如下:


  var test1 = "globalVariable";
  function test(){
    console.log(test1);  
    var test1 = "localVariable";
    console.log(test1);
  }


上述函數執行的結果是:先輸出"undefined",再輸出"localVariable"。
很多人都會誤以為結果是:先輸出"globalVariable,再輸出localVariable"。其實不然,由于函數作用域的特性,局部變量在整個函數體始終是有定義的,也即,在函數體內局部變量遮蓋了同名全局變量,但是只有在程序執行到var語句的時候,局部變量才會被真正的賦值。因此,上述過程相當于,將函數內的變量聲明提前至函數體頂部,同時變量初始化留在原來的位置。就相當于如下這個函數

復制代碼 代碼如下:


  var test1 = "globalVariable";
  function test(){
    var test1;  //將函數內的變量聲明提前至函數頂部
    console.log(test1);  
    test1 = "localVariable";  //賦值
    console.log(test1);
  }


但是,如果函數內沒有用var聲明變量,情況又有所不同。

復制代碼 代碼如下:


  var test1 = "globalVariable";
  function test(){
    console.log(test1);  
    test1 = "localVariable";  
    console.log(test1);  
  }


這個函數執行的結果是:先輸出"globalVariable",再輸出"localVariable"。
由于函數體內的test1變量沒有用var聲明,就默認為全局變量,當然就不存在變量提前聲明的問題。第一行就會輸出"globalVariable",而第三行改變了test1全局變量的值,輸出了"localVariable"。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 翼城县| 双桥区| 钦州市| 六盘水市| 牙克石市| 甘南县| 镇赉县| 平顶山市| 青田县| 甘泉县| 巴楚县| 南阳市| 桂东县| 光山县| 碌曲县| 高阳县| 吕梁市| 岗巴县| 霍林郭勒市| 灵璧县| 化隆| 湖州市| 千阳县| 秦皇岛市| 江门市| 堆龙德庆县| 汤阴县| 雷山县| 贺州市| 阿坝县| 阿瓦提县| 资阳市| 张掖市| 南丹县| 洪泽县| 邮箱| 天津市| 含山县| 潮州市| 定安县| 孟州市|