JS模塊化
JS中變量聲明問(wèn)題
JS為弱類型,編譯型語(yǔ)言
聲明提前
在JS中,聲明語(yǔ)句會(huì)被提前到文件首
//運(yùn)行結(jié)果為2
a=2;
console.log(a);
//var a=3;被分成兩部分,var a; a=3;其中var a;會(huì)被提到文件首
var a=3;
//函數(shù)聲明
function f(){}
//var f1為聲明,f1=function(){}為賦值
//function f(){}不是聲明函數(shù),是函數(shù)表達(dá)式類型
var f1=function(){};
//變量聲明會(huì)提前,但是執(zhí)行時(shí)會(huì)報(bào)錯(cuò),TypeError:f is not a function ...
f();
var f=function(){
alert("ok");
}
靜態(tài)類型為強(qiáng)類型,動(dòng)態(tài)類型為引用類型
作用域
頂級(jí)作用域—全局變量
JS中屬性名可以被覆蓋。
//window.a為全局變量
var a=3;
console.log(window.a);
在一個(gè)作用域以內(nèi),使用變量時(shí),如果本作用域以內(nèi)沒有時(shí),向上查找,直到到頂層變量,如果頂層沒有時(shí),就在頂層聲明一個(gè)變量。
注意在任何情況下使用變量時(shí),使用var聲明。
//自執(zhí)行函數(shù)
(function(){
var a=3;
function f(){
//綁定事件可寫
}
})();
//初始化全局變量,綁定事件
閉包
閉包特性:定義時(shí)作用域。
var a=5;
(function(){
var a=4;
function f(){
console.log(a);
}
window.createf=function(){
return f;
};
})();
var f= createf();
f();