首頁 >web前端 >js教程 >如何對Js變數作用域進行申明?及函數內的作用域實例詳解

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

伊谢尔伦
伊谢尔伦原創
2017-07-18 10:50:441236瀏覽

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

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn