javascript作用域
<html><script type="text/javascript">
/*作用域
在js中,函數(shù)嵌套是非常普遍的,在函數(shù)嵌套中,
對(duì)變量是如何尋找的?
答:首先在函數(shù)內(nèi)部尋找,如果需找不到,則在外層尋找。
直到……全局(window)區(qū)域.從里往外尋找
*/
var c=5;
function t1(){
var d=6;
function t2(){
var e =7;
alert(c+d+e);
}
t2();
}
//t1();//18
function t3(){
var d=6;
function t2(){
var e =7;
d =3;
alert(c+d+e);
}
t2();
}
//t3();//15
/*聲明變量,var的作用
var 是在函數(shù)運(yùn)行的上下文中,聲明一個(gè)變量,
如果不加var,則是一個(gè)賦值操作,
但是不要狹隘的理解為聲明了一個(gè)全局變量
*/
//alert(window.d);
//alert(window.e);
function t(){
d=5;//d沒有加var,僅僅是一個(gè)賦值操作,尋找
//t域內(nèi)的函數(shù),如果沒找到,繼續(xù)向外尋找……到window
//如果window中還沒有d,創(chuàng)建d變量并賦值
var e=6;
}
//t();
//alert(window.d);
//alert(window.e);
function t4 (){
var d;
function t2(){
d=5;
e=6;
}
t2();
}
//t4();
//alert(window.d);//undefined
//alert(d);// d is not defined
//alert(e);
/*
注意:以window.xxx引用全局變量,尋找不到,
作為window的屬性不存在,返回undefined。
直接以xxx引用,尋找不到,則報(bào)xxx is not defined
*/
var s1='g';
function t5(){
alert(s1);//g
alert(s2);//is not defined
s2 = 'lo';
}
// t5();
/*
在t5中尋找s2,沒有找到s2的變量聲明,到window上尋找s2的變量聲明,
還是沒有找到,報(bào)is not defined
*/
function t6(){
alert(s1);//g
alert(s2);//undefined
var s2 = 'lo';
}
t6();
/*
解釋:
js代碼自上而下執(zhí)行,但是js代碼的整體運(yùn)行分為:
詞法分析期和運(yùn)行期
自上而下執(zhí)行之前,先有一個(gè)詞法分析過程。
詞法分析t6函數(shù):
聲明了s2變量,但是沒有對(duì)s2賦值,只有在運(yùn)行期才賦值
因此s2=undefined。
執(zhí)行t6函數(shù):
alert(s1);//g
alert(s2);//undefined
s2 = 'lo';
*/
</script>
</html>
posted on 2014-12-06 16:45 楊軍威 閱讀(173) 評(píng)論(0) 編輯 收藏