在全局作用域中旁钧,帶var和不帶var的關系
區(qū)別:帶var是可以進行預解釋骗露,所以在賦值的前面執(zhí)行不會報錯杯拐;不帶var的是不能進行預解釋的霞篡,在前面執(zhí)行會報錯(ReferenceError)。
console.log(num); // -> undefined
var num = 12;
console.log(num2); // ReferenceError: num2 is not defined
num2 = 12;
關系:num2 = 12; -> 相當于給window增加了一個叫做num2的屬性名端逼,其屬性值為12朗兵。
var num = 12; -> 相當于給全局作用域增加了一個全局變量num,但是不僅如此顶滩,它也相當于給window增加了一個屬性名num余掖,屬性值是12。
var num = 12;
console.log(num); // 12
num2 = 12;
console.log(num2); // 12 -> window.num2 = 12
私有作用域中出現(xiàn)的一個變量不是私有的诲祸,則往上級作用域進行查找浊吏,上級沒有而昨,則繼續(xù)向上查找救氯,一直找到window為止,如果window下也沒有歌憨?
第一種情況:我們是獲取值:console.log(total); -> 報錯了着憨,ReferenceError。
function fn() {
console.log(total); // ReferenceError
total = 100;
}
fn();
console.log(total); // 100
第二種情況:total = 100; -> 相當于給window增加了一個屬性名total务嫡,屬性值是100
function fn() {
// console.log(total); // ReferenceError
total = 100;
}
fn();
console.log(total); // 100
JavaScript中如果在沒有進行任何特殊處理的情況下甲抖,上面一行代碼報錯,下面的代碼都不再執(zhí)行了心铃。