一、函數(shù)及函數(shù)的構(gòu)造
函數(shù)包含著的代碼只能在函數(shù)被調(diào)用時(shí)才會(huì)執(zhí)行,就可以避免頁(yè)面載入時(shí)執(zhí)行該腳本
簡(jiǎn)單來(lái)說(shuō)就是一個(gè)封裝,封裝的是一個(gè)特定的功能,重復(fù)使用
函數(shù)的三種定義方法:
Function構(gòu)造函數(shù)定義函數(shù)
var 函數(shù)名 = new Function(“參數(shù)1”,”參數(shù)2”,”參數(shù)3”……”函數(shù)體”);
function語(yǔ)句定義函數(shù)
function 函數(shù)名 (參數(shù)1,參數(shù)2……[形參]){
<語(yǔ)句塊>
return 返回值
}
在表達(dá)式中直接定義函數(shù)
var 函數(shù)名 = function (參數(shù)1,參數(shù)2,…){函數(shù)體};
注意:
函數(shù)名的書(shū)寫(xiě)規(guī)范,不能一數(shù)字特殊符號(hào)和關(guān)鍵字命名,一般命名方式小駝峰
二、調(diào)用函數(shù)
1.直接調(diào)用
// //直接調(diào)用,window.窗口調(diào)用
// window.show() //show()
2.事件處理中調(diào)用
//事件中調(diào)用
//<div onclick="show()">hello</div>
3.將函數(shù)的返回值賦給變量
//將函數(shù)的返回值賦給變量
var t = show()
三、參數(shù)
實(shí)參:調(diào)用函數(shù)時(shí),傳遞的參數(shù)
參數(shù)的匹配: 但是當(dāng)傳遞的參數(shù)個(gè)數(shù)與函數(shù)定義好的參數(shù)個(gè)數(shù)可以不匹配當(dāng)不匹配時(shí)
-
如果傳遞的參數(shù)個(gè)數(shù)小于函數(shù)定義的參數(shù)個(gè)數(shù),JavaScript會(huì)自動(dòng)將多余的參數(shù)值設(shè)為undefined;
-
如果傳遞的參數(shù)個(gè)數(shù)大于函數(shù)定義的參數(shù)個(gè)數(shù),那么多余傳遞的參數(shù)將會(huì)被忽略掉。
如果傳遞的參數(shù)是一個(gè)數(shù)組的話,一一對(duì)應(yīng)太過(guò)麻煩,我們就用arguments,獲取所有實(shí)參
function show (a,b){
console.log(arguments.length);
}
show('guo','yuan')
function Test(a,b){
alert(typeof(arguments)); // 獲得類型
alert(arguments[1]); // 獲取下標(biāo)為1的參數(shù)值
alert(arguments.length); // 獲取參數(shù)的長(zhǎng)度
alert(arguments.callee); // 獲取函數(shù)的所有內(nèi)容
}
Test("zhang","li");
四、函數(shù)的返回值
return特點(diǎn): | |
? | 1)函數(shù)內(nèi)部的值(局部變量),想要在函數(shù)外部進(jìn)行(全局變量)使用,就可以使用return |
? | 2)如果沒(méi)有return,那么return的返回值默認(rèn)值undefined |
? | 3)return可以返回值,但是只能返回一個(gè);如果想要返回多個(gè),可以使用數(shù)組進(jìn)行返回 |
? | 4)在函數(shù)中,只要看到return,就表示函數(shù)的結(jié)束,后面的代碼都不會(huì)執(zhí)行 |
五、變量作用域
在函數(shù)外聲明的的變量為全局,在整個(gè)JS文檔中生效
局部變量: 在函數(shù)內(nèi)用var聲明的變量為局部變量,只能在函數(shù)內(nèi)部使用。
局部變量變成全局: | |
? | return 返回 |
? | 去除 var 關(guān)鍵詞 |
什么是作用域鏈
-
只要在js中創(chuàng)建變量,就會(huì)存在作用域【全局作用域】
-
寫(xiě)在函數(shù)內(nèi)部的被稱為局部作用域
-
如果函數(shù)中還有函數(shù),那么在這個(gè)作用域中就又可以誕生一個(gè)新的作用域
-
在函數(shù)中如果在當(dāng)前作用域中沒(méi)有查到值,就會(huì)向上級(jí)作用域去查,直到查到全局作用域,這樣一個(gè)查找過(guò)程形成的鏈條就叫做作用域鏈。
六、預(yù)解析
預(yù)解析,又稱之為變量提升,在js代碼真正執(zhí)行之前,進(jìn)行提前加載,把所有帶有var和function的關(guān)鍵字進(jìn)行預(yù)
//預(yù)解析:
var function
console.log(fn) // 函數(shù)體
var fn = 10;
function fn(){
}
console.log(fn) // 變量
同時(shí)出現(xiàn)變量和函數(shù)的提升,在他們兩個(gè)之前輸出的話解析的是函數(shù)體,預(yù)解析的優(yōu)先級(jí)大于變量的
如果在他們兩個(gè)之后輸出的話解析的是變量,因?yàn)楦鶕?jù)優(yōu)先棧內(nèi)存找到數(shù)據(jù)的執(zhí)行代碼順序先找到的var變量
預(yù)解析相關(guān)案例練習(xí):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-741795.html
// 案例1
var num = 10;
fun();
function fun(){
console.log(num);
var num = 20;
}
// 案例二
var num = 10;
function fun() {
console.log(num);
var num = 20;
console.log(num);
}
fun();
// 案例三
var a = 18;
f1();
function f1() {
var b = 9;
console.log(a);
console.log(b);
var a = 13;
}
// 案例四
console.log(a,b,c);
var a = b = c = 5;
// 案例四
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
// 案例五
fn();//報(bào)錯(cuò) 只預(yù)解析“=”左邊的,右邊的是指針,不參與預(yù)解析
var fn=function(){
console.log(11);
}
// 案例六
function fn(){
console.log(a);
a=100;
}
fn();
console.log(a);
//注意:js中,如果在不進(jìn)行任何特殊處理的情況下,上面的代碼報(bào)錯(cuò),下面的代碼不再執(zhí)行
// 案例七
console.log(show);
function show(){
console.log(123);
}
var show = 10;
// 案例八
function show(){
console.log(123);
}
var show = 10;
console.log(show);
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-741795.html
到了這里,關(guān)于JavaScript 函數(shù)、函數(shù)構(gòu)造、函數(shù)調(diào)用、參數(shù)、函數(shù)返回值、變量的作用域、預(yù)解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!