1、javascript沒有塊級作用域,無塊作用域限制,局部環(huán)境銷毀
function changeColor(){
for(var i=0;i<3;i++){
var num=0;
num=i
}
alert(num)//3
}
console.log(num)//undefined
(1)無塊作用域限制:在這里alert(num)正常輸出num的值,因為javascript沒有塊級作用域,alert()不會訪問不到num(但在c,c++,Java中有塊級作用域)
(2)局部環(huán)境銷毀:num仍然作為一個變量被寫入changeColor執(zhí)行環(huán)境對象,因為changeColor執(zhí)行環(huán)境在執(zhí)行完后,環(huán)境銷毀,num變量不存在
2、不使用var聲明的變量被寫進全局環(huán)境
function changeColor(){
for(var i=0;i<3;i++){
num=i;
}
alert(num)
}
console.log(num)
//console打印出num值,使用var的變量被添加到最近的執(zhí)行環(huán)境中,不使用var添加到全局環(huán)境中
3、變量屬于哪個域是定義時確定不是調(diào)用時確定,變量搜索順序為從內(nèi)到外
var color="red"
var fu=function(){
console.log(color)
var color="blue"
}
fu()
//結(jié)果:undefined
var color="red"
var fu=function(){
console.log(color)
}
fu()
//結(jié)果:red
(1)變量屬于哪個域是定義時確定不是調(diào)用時確定:定義函數(shù)時,fu對象域中有變量color,全局環(huán)境中有變量color,
(2)執(zhí)行時console.log()從內(nèi)到外搜索到color屬于fu對象,但此時color只聲明未被初始化,結(jié)果為undefined
4、全局對象:在任何地方可被訪問,模塊化編程避免使用
最外層定義變量
全局對象的屬性
未定義直接賦值的變量