2.JS函數(shù)
JS函數(shù)創(chuàng)建類型:
????構(gòu)造函數(shù):?
????????將代碼語句以字符串形式傳遞給構(gòu)造函數(shù) var fun = new Function("console.log("Hi");");
????函數(shù)聲明: (類似于聲明變量 “var”)
????????function fun ([arg1, arg2...]) {語句}?
????????利用函數(shù)名調(diào)用:fun();
????函數(shù)表達(dá)式(匿名函數(shù)):
????????function([arg1, arg2...])?{語句}
????????var fun = function([arg1, arg2...]) {語句};? // 賦值語句結(jié)尾需加“;”
????????利用變量名調(diào)用:fun();
作用域(變量的作用的范圍):
????全局作用域(直接編寫在script標(biāo)簽中的JS代碼)
????????全局作用域中的變量都是全局變量,在頁面的任意的部分都可以訪問
????????在全局作用域中有一個全局對象window
????????????“變量”都會作為“window對象的屬性”保存
????????????????var a = 1;
????????????????console.log(window.a);
????????????“函數(shù)”都會作為“window對象的方法”保存
????????????????function fun() {}
????????????? ? window.fun();
????函數(shù)作用域(相當(dāng)于小全局)
????????在函數(shù)作用域中可以訪問到全局作用域的變量,在全局作用域中無法訪問到函數(shù)作用域的變量
????????當(dāng)在函數(shù)作用域操作一個變量時,它會先在自身作用域中尋找,如果有就直接使用,如果沒有則向上級作用域中尋找
????????在函數(shù)中要訪問全局變量可以使用window對象
????????????function fun() {
????????????????console.log("a?= " + window.a);
????????????}
????????在函數(shù)中,不使用“var”聲明的變量都會成為“全局變量”,相當(dāng)于:window.a?= 1;
? ? ????????function fun()?{
????????????????a = 1;
????????????}
????????????console.log(a); ? 1
????????定義形參就相當(dāng)于在函數(shù)作用域中聲明了變量
聲明提前:
????變量的聲明提前:
????? ? “var”關(guān)鍵字聲明的變量, 會在所有的代碼執(zhí)行之前被聲明(但是不會賦值)
????????????var a = 1;
????????但是如果聲明變量時不使用“var”關(guān)鍵字,則變量不會被聲明提前
????????????a = 1;
????函數(shù)的聲明提前:
????????“函數(shù)聲明”形式創(chuàng)建的函數(shù),它會在所有的代碼執(zhí)行前被創(chuàng)建,所以可以在函數(shù)聲明前來調(diào)用函數(shù)
????????function fun() {}
????????“函數(shù)表達(dá)式”創(chuàng)建的函數(shù),不會被聲明提前,所以不能在聲明前調(diào)用
????????var fun = function() {};