調(diào)用函數(shù)
調(diào)用函數(shù)有五種方法
- 1.函數(shù)調(diào)用:函數(shù)調(diào)用是調(diào)用函數(shù)的常規(guī)方法:
函數(shù)名(arg)
- 2.方法調(diào)用:
- 方法:如果一個(gè)對(duì)象的屬性的值是一個(gè)函數(shù)沙兰,我們就稱方法。
- 方法調(diào)用是通過對(duì)象的屬性調(diào)用函數(shù):對(duì)象.方法()
- 構(gòu)造函數(shù)調(diào)用:使用new 構(gòu)造函數(shù)() : Number String Array Object Boolean
- 間接調(diào)用:指通過函數(shù)自身的方法調(diào)用函數(shù) call() apply() bind()
- 自調(diào)用:函數(shù)自己調(diào)自己 自執(zhí)行
(function(){})
函數(shù)采納數(shù)的基礎(chǔ)知識(shí)
參數(shù)是什么灰羽?
參數(shù)是函數(shù)調(diào)用是累驮,傳入到函數(shù)體內(nèi)的值府怯。在函數(shù)體內(nèi)對(duì)值進(jìn)行處理,把處理的結(jié)果使用return返回出去位岔。
參數(shù)的分類
- 形參:形式上的參數(shù)如筛。形參出現(xiàn)在定義函數(shù)是。形參是函數(shù)體內(nèi)局部變量抒抬。(只不過省略了var聲明而已杨刨。)英文:parameter => para
- 實(shí)參:實(shí)際傳入的參數(shù)。實(shí)參出現(xiàn)在調(diào)用函數(shù)是擦剑。實(shí)參傳入函數(shù)體內(nèi)的值妖胀。英文:arguments => args
形參的默認(rèn)值
示例:形參默認(rèn)值
function sum(a,b) {
return a + b
}
//JS:定義函數(shù)時(shí)它不檢查參數(shù)類型 調(diào)?函數(shù)時(shí)不檢查參數(shù)數(shù)量
function sum(a=0, b=0) {
//傳統(tǒng)檢測(cè)參數(shù)的?法
// if(b){
// return a + b
// } else if(a) {
// return a
// } else {
// return 0
// }
//在繁瑣的檢測(cè)參數(shù)的背景下芥颈,形參默認(rèn)值語法出現(xiàn)
return a + b
}
console.log(sum())//NaN => 0
console.log(sum(2))//NaN => b = 0 || 忽略b
console.log(sum(2,9))//11
console.log(sum(2,9,5))//11
剩余參數(shù)
剩余參數(shù)是什么
- 剩余參數(shù)是取代arguments對(duì)象的?種?案。
- 剩余參數(shù)?于接收多余的實(shí)參(實(shí)參先傳?形參赚抡,后傳?剩余參數(shù))爬坑。
- 剩余參數(shù)是?個(gè)數(shù)組
- 剩余參數(shù)是?個(gè)標(biāo)識(shí)符,標(biāo)識(shí)符前?有三個(gè)點(diǎn):
...args
- 剩余參數(shù)必須放在參數(shù)列表的最后?位
function sum(a,b,...rest){
//函數(shù)體
}
sum(10,20,30,40,50)
實(shí)列:找最大數(shù)
function max(a,...aaa){
let maxValue = -Infinity
for(n of aaa){
if(n>maxValue){
maxValue = n
}
}
return maxValue
}
let resule = max(1,10,100,1000,-10000)
console.log(resule )//1000
arguments對(duì)象
- 示例:利用arguments對(duì)象向函數(shù)體內(nèi)傳遞參數(shù)
function sum(){
let len = arguments.length
let sum = 0
for(let i=0;i<len;i++){
sum += arguments[i]
}
return sum
}
let result = sum(4,6)
console.log(result)
- 求和
function sum(a,b,...args){
let num = a + b
for(n of args){
num = num + n
}
return num
}
let result = sum(4,6,3,7,5)
console.log(result)
arguments是什么
- 向函數(shù)體內(nèi)傳遞實(shí)參的第二種方法
- arguments是一個(gè)函數(shù)體內(nèi)的內(nèi)置對(duì)象涂臣。
- arguments是一個(gè)類數(shù)組對(duì)象
- 通過arguments對(duì)象可以訪問調(diào)用函數(shù)時(shí)的全部實(shí)參
什么時(shí)候使用arguments對(duì)象盾计?
當(dāng)實(shí)參數(shù)目不確定的時(shí)候,可以考慮使用arguments對(duì)象赁遗。但是在新寫的代碼中應(yīng)該盡量避免使用它署辉,它效率低且難優(yōu)化。通澈鸷停可以將其替換為...args剩余參數(shù)涨薪。
注意: 箭頭函數(shù)內(nèi)不存在arguments對(duì)象骑素。
函數(shù)的用途
函數(shù)的本質(zhì)工作: 直接賦值代碼
值就是數(shù)據(jù)
函數(shù)的本質(zhì)功能:通過語法定義一種形式炫乓,通過這種形式我們可以重復(fù)調(diào)用代碼,從而增強(qiáng)代碼的復(fù)用性献丑。
函數(shù)作為值:把函數(shù)看做是數(shù)據(jù)
把函數(shù)賦值給一個(gè)變量
let a = function()
{
console.log('hahaha')
}
把函數(shù)賦值給對(duì)象的屬性
let sing = function(){console.log('hahahaha')}
let a = sing
// sing()
// a()
let songs = {zhnagsan:'hello',lisi:'你好'}
let student = {
name: 'zhangsna',
age: 19,
sing,
songs
}
// student.sing()
console.log(student.songs)
把函數(shù)賦值給數(shù)組元素
let arr = [1,2,student.sing]
把函數(shù)賦值給形參
arr.sort()
定義:array.sort()
對(duì)數(shù)組元素就地排序并返回排序后的數(shù)組末捣。
語法一:默認(rèn)的排序方法
array.sort()
不傳遞參數(shù)的情況,使用sort()的工作原理
let arr = [20,3,1,100]
//1 -> 49 2->50 3->51 1 ->49
arr.sort()
console.log(arr);//[ 1, 100, 20, 3 ]
let arr2 = ['d','a',3,'A','y']
arr2.sort()//? [3,'A','a','d','y']
- 按字符編碼排序:將數(shù)組元素轉(zhuǎn)字符串然后?較它們的UTF-16編碼
- 默認(rèn)升序排列
- 如果編碼相同创橄,那么按照原有順序排序
語法二:使用比較函數(shù)排序的語法
array.sort(compareFun)
- Compare:?較 fun:function函數(shù)
- copareFun: 這是ECMAScript的內(nèi)置函數(shù)箩做,內(nèi)置在sort函數(shù)體內(nèi)。
- 在?較兩個(gè)值的時(shí)候妥畏,將值發(fā)送給?較函數(shù)邦邦,?較函數(shù)會(huì)返回負(fù)值、0醉蚁、正直
a > b => 升序
a < b => 降序
let arr = [20,3,1,100]
arr.sort((a,b) => a > b)//隱式return
console.log(arr);
函數(shù)作為命名空間
函數(shù)的?途:保證函數(shù)體內(nèi)的變量不會(huì)污染到全局命名空間
var a = '你好'
;(function (){
//假設(shè)下?是外來的可復(fù)?代碼燃辖,放在函數(shù)體內(nèi),a就變成了局部變量网棍,避免與外部的全局變量a發(fā)?沖突
let a = 'hello'
var aa = 'hell'
}())
// console.log(a)
console.log(window.a);//變量a的副作?是影響到了window對(duì)象黔龟,因?yàn)樵谌窒露x的屬性都會(huì)成為window對(duì)
象上的?個(gè)屬性
console.log(window.fn)//變量fn的副作?是影響到了window對(duì)象,因?yàn)樵谌窒露x的函數(shù)都會(huì)成為window
對(duì)象上的?個(gè)?法
//所以我們可以去掉函數(shù)名滥玷,添加?括號(hào)氏身,改成?執(zhí)?函數(shù)來解決window對(duì)象上的副作?
;(function(){
let a = 'hello'
var aa = 'hell'
}())
?. (可選鏈運(yùn)算符)
- ?. 可以無限鏈下去,不論有多少屬性惑畴,只要有最后可以訪問到屬性蛋欣,就會(huì)直接賦值最后的屬性值。否則當(dāng)任何一個(gè)鏈出現(xiàn)問題如贷,立刻停止豁状,而后賦值undefined捉偏。