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>
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持!