一、變量
ECMAscript變量是松散型變量,所謂松散型變量,就是變量名稱可以保存任何類型的數據,每個變量僅僅是一個用于保存值的占位符。
定義變量時要使用var操作符
如:
var message;
/*定義一個名為message的變量,該變量可以用來保存任何值,未初始化的變*量會保存一個特殊的值-undefined
*/
?二、局部變量 ??
可以聲明變量里同時初始化
function test(){var message='hello'; //定義局部message變量,并初始值為helloalert(message); //將message內容彈出
}test();
</script>
錯誤的寫法
function test(){var message='hello'; //定義局部message變量,并初始值為hello
}test();
alert(message); //錯誤
由以上兩個例子可以看出,如果在一個函數中使用var 定義一個變量,那么該變量在函數退出后會被銷毀
?三、定義全局變量
function test(){message='hello'; //全局message變量,并初始值為hello
}test();
alert(message); //hello
這里因為省略了var,因而message就成了全局變量,這樣只要調用過一次test()函數,這個變量就有了定義,就可以在函數外部的任何地方被訪問
省略var 定義變量:只要調用一次定義該變量的函數,全局范圍內都可訪問該變量。這種定義變量的方法也被成為隱式聲明
?四、作用域和范圍
?
<SCRIPT type="text/javascript"> //定義一個輸出函數 function outPut(s){ document.writeln(s); } //全局變量 var i=0; //定義外部函數 function outer(){ //訪問全局變量 outPut(i); // 0 //定義一個類部函數 function inner(){ //定義局部變量 var i = 1; // i=1; 如果用隱式申明 那么就覆蓋了全局變量i outPut(i); //1 } inner(); outPut(i); //0 } outer(); </SCRIPT>
?
結果:0,1,0
<script type="text/javascript">function demoFunction(s){ document.writeln(s) } var i=0; function test(){ demoFunction(i); function innerFunction(){ demoFunction(i); var i=1; demoFunction(i);} innerFunction(); demoFunction(i); } test(); </script>
結果:0 undefined 1 0
?JS函數體中聲明的本地變量在整個函數中都有效,因此在上面代碼中var i = 1 ;在inner函數中都有效,實際上顯式聲明的變量i是在預編譯時就已經編譯到調用對象中了,不同于隱式聲明變量在解釋時才被定義為全局變量,只是在調用outPut(i)時,還沒有將它初始化變量,此時的本地變量i是未賦值變量,而不是未定義變量,因此輸出了undefined。上面的代碼等效于下面代碼:
function inner(){ var i; //定義但不賦值 outPut(i); //undefiend i=1; outPut(i); //1 }
?
?
?