作用域鏈2

1.函數內部的變量取代全局同名變量

var t = "pp";
function test() {
   //  函數內部的變量取代全局同名變量 
  //執行t的時候,它會先找作用域鏈對象,由於它定義在函數內部,
  //所以這個函數就是它的作用域鏈的第一個對象
  //而在這個對象裏又有t的定義,所以t就是局部變量了,它替換了全局變量t
  //t只是此時有定義,但並沒有賦值,賦值在下一行,所以這裏輸出了undefined
alert(t);
// var聲明提前,定義了沒有賦值,是undefined;沒有定義的話就是報錯;
var t = "aa";
alert(t);
}
test(); 

2.javascript 沒有var的變量都爲全局變量,且爲window對象的屬性

function test() {
//執行這個句的時候它會找作用域對象,這個函數就是作用域鏈中的第一個對象,
// 但這個對象中沒有相關的var語句
// 於裏就找作用域鏈的第二個對象,即全局對象,而全局對象中也沒有相關的var語句
//由於沒有相關的var語句,js隱式在函數地聲明瞭變量即var all,就是代表全局變量;
 all = 30;
alert(all);
}
test();
alert(all);
// window是代表定義了,沒有數據就會打印undefined,不會報錯;
alert(window.all); 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章