javaScript 變量作用域

全局變量與局部變量

定義在函數外面的變量,稱為全局變量,定義在函數里面的變量稱為局部變量。例如函數中使用var定義的變量和參數都是局部變量。

定義變量

早期的原生js不需要使用var就可以定義變量,因為他們認為window.變量,所有的變量都是window的屬性,而window是可以省略的,所有沒有var可以使用,但是到了ES5的後期, 嚴格要求的代碼規範不允許無聲明就使用變量,沒有var是不行的 。

實例1

<code>var a=3;
function abc(){
console.log(a);
//結果:undefined
// 在當前函數中使用var定義了局部變量,那麼在當前函數中任何位置調用的都是局部變量,全局變量是無法獲取的
var a=5;
console.log(a);
// 局部變量不會覆蓋全局變量,但在函數中打印臨時變量。結果:5;
console.log(window.a+a);
// window.a就是全局變量a,後面的a是局部變量a,結果:3,5
}/<code>

函數中的局部變量在函數外不可調用,僅可在函數中使用。

函數中可調用全局變量。

一旦函數中的局部變量名和全局變量名相同,在函數中使用的變量都是局部變量

實例2

<code>var a=1;
function a(a){
console.log(a);//(2)
var a=3;
console.log(a);//(3)
}
console.log(a);//(1) 1
a(10); //1不是一個函數所有報錯/<code>

變量與函數不可重名

代碼解釋:命名函數在代碼中定義以後,script被執行時,會自動將函數放在堆中並且將函數存儲在棧中的全局變量,定義函數全局是最為優先,最早的當代碼執行到第1行 var a=1時,才開始重新定義變量a,而這個變量a與棧中的全局函數a重名,因此變量a就會覆蓋全局函數a


分享到:


相關文章: