寫(xiě)網(wǎng)站建設(shè)的軟文互聯(lián)網(wǎng)營(yíng)銷(xiāo)師報(bào)名費(fèi)
JavaScript函數(shù)及面向?qū)ο?/h1>
4.1、函數(shù)定義及變量作用域
定義方式一
定義方式一
絕對(duì)值函數(shù)
function abs(x){if(x>=0){return x;}else{return -x;}
}
一旦執(zhí)行到return代表函數(shù)結(jié)束,返回結(jié)果!
如果沒(méi)有執(zhí)行return,函數(shù)執(zhí)行完也會(huì)返回結(jié)果,結(jié)果就是undefined
定義方式二
var abs = function(x){if(x>=0){return x;}else{return -x;}
}
function(x){…} 這是一個(gè)匿名函數(shù),但是可以把結(jié)果賦值給abs,通過(guò)abs就可以調(diào)用函數(shù)
方式一和方式二等價(jià)!
調(diào)用函數(shù)
abs(10) //10
abs(-10) //10
參數(shù)問(wèn)題:JavaScript可以傳任意個(gè)參數(shù),也可以不傳遞參數(shù)~
參數(shù)進(jìn)來(lái)是否存在的問(wèn)題?
假設(shè)不存在參數(shù),如何規(guī)避
function abs(x){//手動(dòng)拋出異常if(typeof x!=='number'){throw 'Not a number';}if(x>=0){return x;}else{return -x;}
}
arguments
arguments是一個(gè)JS免費(fèi)贈(zèng)送的關(guān)鍵字
代表:傳遞進(jìn)來(lái)的所有參數(shù),是一個(gè)數(shù)組
var abs=function(x){//手動(dòng)拋出異常console.log("x=>"+x);for (var i = 0; i < arguments.length; i++) {console.log(arguments[i]);}if(typeof x!=='number'){throw 'Not a number';}if(x>=0){return x;}else{return -x;}
}
問(wèn)題:arguments包含所有的參數(shù),我們有時(shí)候想使用多余的參數(shù)來(lái)進(jìn)行附加操作。需要排除已有的參數(shù)~
rest
以前:
if(arguments.length>2){for (let i = 2; i < arguments.length; i++) {//.....}
}
ES6引入的新特性,獲取除了已經(jīng)定義的參數(shù)之外的所有參數(shù)~ …
<script>function aaa(a,b,...rest){console.log("a=>"+a);console.log("b=>"+b);console.log(rest)}
rest參數(shù)只能寫(xiě)在最后面,必須用…標(biāo)識(shí)。
4.2、變量的作用域
在JavaScript中,var定義變量實(shí)際是有作用域的。
假設(shè)是在函數(shù)體中聲明,則在函數(shù)體外不可以使用~ (閉包)
function qj(){var x=1;x=x+1;
}
x=x+2; //Uncaught ReferenceError: x is not defined
如果兩個(gè)函數(shù)使用了相同的變量名,只要在函數(shù)內(nèi)部,就不沖突
內(nèi)部函數(shù)可以訪問(wèn)外部函數(shù)的成員,反之則不行。
養(yǎng)成規(guī)范:所有的變量定義都放在函數(shù)的頭部,不要亂放,便于代碼維護(hù);
全局函數(shù)
//全局變量
function f(){console.log(x);
}
f();
console.log(x);
全局對(duì)象window
var x='xxx';
alert(x);
alert(window.x); //默認(rèn)所有的全局變量,都會(huì)自動(dòng)綁定在window對(duì)象下;
alert()這個(gè)函數(shù)本身也是一個(gè)window變量
4.3、方法
定義方法
方法就是把函數(shù)放在對(duì)象的里面,對(duì)象只有兩個(gè)東西:屬性和方法
var kuangshen={name:'秦疆',birth:2020,//方法age:function(){//今年 - 出生的年var now = new Date().getFullYear();return now - this.birth;}
}
//屬性
kuangshen.name
//方法,一定要帶()
kuangshen.age()
this.代表什么?才開(kāi)代碼來(lái)看看
function getAge(){//今年 - 出生的年var now = new Date().getFullYear();return now - this.birth;}
var kuangshen={name:'秦疆',birth:2020,//方法age:getAge
}
this是無(wú)法指向的,是默認(rèn)指向調(diào)用它的那個(gè)對(duì)象;
apply
在js中可以控制this指向
function getAge(){//今年 - 出生的年var now = new Date().getFullYear();return now - this.birth;}
var kuangshen={name:'秦疆',birth:2020,//方法age:getAge
}getAge.apply(kuangshen,[]);//this,指向kuangshen,參數(shù)為空