首頁 > web前端 > js教程 > 主體

JS變數及其作用域知識點介紹

巴扎黑
發布: 2017-08-17 14:00:21
原創
1516 人瀏覽過
1、 變數及其作用域:變數分為“全域變數”和“局部變數”,“全域變數”申明在函數外部,可供所有函數使用,而“局部變數”申明在函數體內部,只能在定義該變數的函數體內使用。
(備註:在申明變數時沒有var關鍵字,而是直接賦值的變數皆為全域變數)
<script type="text/javascript">
  function main() {  
    n = 10;//这里的n为全局变量,可以被外部直接使用
  }
  main();
  alert(n);
</script>
登入後複製

2、 在函數體內,局部變數的優先權高於全域變數。
<script type="text/javascript">
  //网上看到的我认为很有代表性的一个例子,在函数体外部和内部都申明了相同名字的变量,变量的作用域问题,例子如下:
  var n = 1;
  function test() {
    alert(n); //这里的a并不是全局变量,原因是函数体第四行申明了一个相同重名的局部变
         //量a,如果把第四行a的申明注释掉,那么这里的a显示1,为全局变量。所以得
         //出结论:全局变量a被局部变量a覆盖了。
         //说明了JS函数在test()在执行前,函数体内的变量a都指向了局部变量,但本
         //行输出的a在执行过程中还没有被赋值,所以显示undefined。
    n = 2;
    alert(n);
    var n; //本行申明局部变量a
    alert(n);
  }
    test();
    alert(n);
</script>
登入後複製

按照我的理解,上面例子最後輸出的答案應該是:1 2 2 1;但是正確的答案是:undefined 2 2 1;原因就是函數體外部和內部都申明了相同名字的變數時,局部變數覆蓋了全域變數。
3、 外部怎麼讀取函數體內部的局部變數呢?
一般來說,只有函數體內部可以直接得到外部的全域變量,但是外部要得到函數體內部的局部變數是不行的。但是,透過在函數體內部再定義一個函數返回局部變量,再從外部呼叫函數就能實現了。
<script type="text/javascript">
  function f1() {    
    var n = 10;    
    function f2() {//在f1()内部再定义f2(),通过f2()访问f1()中的局部变量      
      alert(n);    
    }    
    return f2;//返回f1()局部变量n
  }  
  var result = f1(); //在外部调用f1()函数,就能获取局部变量n的值
  result(); // 10,即为n的值
</script>
登入後複製

以上是JS變數及其作用域知識點介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板