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

如何對Js變數作用域進行申明?及函數內的作用域實例詳解

伊谢尔伦
發布: 2017-07-18 10:50:44
原創
1214 人瀏覽過

變數的作用域指的是變數的可見性,而生命週期則(存活期)則是從另一個角度來檢視變數。

JS中變數的作用域分為全域變數和局部變量,函數內定義的稱為局部變量,函數外的稱為全域變數。 (「函數外的稱為全域變數」是相對的,另此處討論的前提是用var明確聲明的變量,函數內不用var定義的變數預設是全域變量,當然忽略var聲明變數是不贊成的)。

var glob = 4;//函数外声明全局变量 
function fun() { 
    var height = 20; //函数内用var声明的是局部变量 
    weight = 50; //函数内不用var声明的是全局变量 
} 
fun(); 
alert(weight);
登入後複製

JS中沒有區塊級作用域,即用大括號{}包含的。 Java中則有。在main方法中寫入下程式碼

public static void main(String... args) { 
  for(int i=0;i<5;i++) { 
  } 
    { 
        int j=10; 
    } 
    int z = 20; 
    System.out.println(i); // i不可见,语法分析时报错,即编译不通过 
    System.out.println(j); // j不可见,语法分析时报错,即编译不通过 
    System.out.println(z); // z可见,输出20 
}
登入後複製

但如果在JS中 

for(var i=0;i<5;i++) { 
} 
var obj = {name:"Lily"}; 
for(var attr in obj) { 
} 
{ 
  var j=10; 
} 
alert(i);//输出4,没有块级作用域 
alert(attr); //输出name,没有块级作用域 
alert(j);//输出10,没有块级作用域
登入後複製

這也說明一個問題,避免在全域範圍內使用for迴圈同時宣告變量,否則會造成全域命名範圍的污染。

當然,JS1.7中提出了let關鍵字宣告變量,只作用於for語句範圍。 

for(let i=0;i<5;i++) { 
   //todo 
} 
alert(i);//运行时报错,提示i未定义
登入後複製

js函數內變數的作用域實例:

<html>
<head>
</head>
<body>
<script type="text/javascript">
var a = 5;
var c = 3;
function t(){
 var a = 6;
 var b = 10;
 document.write(a+&#39;-----&#39;+b);
 document.write(c);
}
t();
</script>
</body>
</html>
登入後複製

與php不同,js函數中如果要呼叫某個變數,它會先從函數內去尋找。如例子中是 a 是等於6;而在函數體內找不到c,於是,它就會在函數體外,往上找,找到即調用,找不到則報錯。

以上是如何對Js變數作用域進行申明?及函數內的作用域實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!