學習js一段時間了,今天來談談js函數作用域方面的知識
- js的變量作用域是函數級的,在js裏沒有類似c語言的塊級作用域。
- js編程環境的頂級作用域是window對象下的範圍,稱爲全局作用域,全局作用域中的變量稱爲全局變量。
- js函數內的變量無法在函數外面訪問,在函數內卻可以訪問函數外的變量,函數內的變量稱爲局部變量。
- js函數可以嵌套,多個函數的層層嵌套構成了多個作用域的層層嵌套,這稱爲js的作用域鏈。
- js作用域鏈的變量訪問規則是:如果當前作用域內存在要訪問的變量,則使用當前作用域的變量,否則到上一層作用域內尋找,直到全局作用域,如果找不到,則該變量爲未聲明。
注意,變量的聲明在代碼解析期完成,如果當前作用域的變量的聲明和賦值語句寫在變量訪問語句後面,js函數會認爲當前作用域已經存在要訪問的變量不再向上級作用域查找,但是,由於變量的賦值發生的代碼運行期,訪問的到變量將是undefined.
如:
var c=1000;
function out(){
var a=1;
var b=2;
function fun(){
alert(a); //undefined
var a=10;
alert(a); //10
alert(b); //2
alert(c); //1000
}
fun();
}
out();