變量的作用域是往往是人們輕易忽略而又至關(guān)重要的問題,尤其是在javascript中。
- javascript中變量的作用域有以下特點:
- 以函數(shù)劃分的函數(shù)域
- 沒有特定的塊作用域
- 沒有用var聲明的變量就是是全局變量
下面來看一個具體示例:
var global =1;
function f(){
var local = 2;
global++;
return global;
}
alert(f()) ;//2
alert(f()) ;//3
alert(window.local);//undefined
代碼中可以看出聲明一個全局變量global 和一個局部變量local;
而函數(shù)f()可以訪問外面的全局變量global;
但是在函數(shù)f()外 局部變量local是不存在的
很顯然函數(shù)內(nèi)的代碼可以像訪問局部變量那樣訪問全局變量,
反之則不行
2 函數(shù)作用域的聲明提前問題
先來看如下代碼:
var scope ="global";
function f(){
alert(scope);//undefined
var scope ="local";
alert(scope);//local
}
f();
很顯然第一個彈出框并沒有如我所想彈出的global而是undefined
這是為什么呢?
其實由于函數(shù)作用域特性
函數(shù)域始終優(yōu)于全局域
同名的局部變量會覆蓋掉全局變量
而第一次調(diào)用alert的時候scope還沒正式定義 所以為undefined
以上代碼可以理解為:
function f(){
var scope;
alert(scope);
var scope ="local";
alert(scope);
};
f();
//等價與函數(shù)內(nèi)變量的聲明'提前'至函數(shù)體頂部