變數的作用域指的是變數的可見性,而生命週期則(存活期)則是從另一個角度來檢視變數。
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+'-----'+b); document.write(c); } t(); </script> </body> </html>
與php不同,js函數中如果要呼叫某個變數,它會先從函數內去尋找。如例子中是 a 是等於6;而在函數體內找不到c,於是,它就會在函數體外,往上找,找到即調用,找不到則報錯。
以上是如何對Js變數作用域進行申明?及函數內的作用域實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!