每個(gè)函數(shù)都是Function類型的實(shí)例鸯屿,而且都與其他引用類型一樣具有屬性和方法。
函數(shù)是對象宛蚓,因此函數(shù)名實(shí)際上也是一個(gè)指向函數(shù)對象的指針餐曼,不會與某個(gè)函數(shù)綁定压储。
函數(shù)的三種定義方法:
函數(shù)名僅僅是指向函數(shù)的指針,因此函數(shù)名與包含對象指針的其他變量沒有什么不同踩娘。(即一個(gè)函數(shù)可以有多個(gè)名字)
使用不帶圓括號的函數(shù)名是訪問函數(shù)指針,而非調(diào)用函數(shù)S盍ⅰW俪琛!
函數(shù)聲明與函數(shù)表達(dá)式:
作為值的函數(shù):
可以從一個(gè)函數(shù)中返回另一個(gè)函數(shù)柳琢,而且這也是極為有用的一種技術(shù)。
函數(shù)內(nèi)部屬性:
函數(shù)內(nèi)部有兩個(gè)特殊的對象:arguments?和?this
arguments的主要用途是保存函數(shù)參數(shù)润脸,但這個(gè)對象還有一個(gè)名叫callee的屬性柬脸,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對象的屬性毙驯。
this當(dāng)前執(zhí)行的環(huán)境對象
caller屬性:
函數(shù)屬性和方法:
每個(gè)函數(shù)都包含兩個(gè)屬性:length 和 prototype。
其中length屬性表示函數(shù)希望接收的命名參數(shù)的個(gè)數(shù)尔苦。
對于ECMAScript中的引用類型而言,prototype是保存它們所有實(shí)例方法的真正所在。換句話來說允坚,注入toString()和valueOf()等方法實(shí)際上都保存在prototype名下魂那,只不過是通過各自對象的實(shí)例訪問罷了。在創(chuàng)建自定義引用類型以及實(shí)現(xiàn)繼承時(shí)稠项,prototype屬性的作用是極為重要的涯雅。
每個(gè)函數(shù)都包含兩個(gè)非繼承而來的方法:apply()和 call()
這兩個(gè)方法的用途都是在特定的作用域中調(diào)用函數(shù),實(shí)際上等于設(shè)置函數(shù)體內(nèi)this對象的值展运。
apply()方法接收兩個(gè)參數(shù):一個(gè)是在其中運(yùn)行函數(shù)的作用域(this)活逆,另一個(gè)是參數(shù)數(shù)組(可以是Array的實(shí)例,也可以是arguments對象)拗胜。
call()方法和apply()方法的作用相同,它們的區(qū)別僅在于接收參數(shù)的方式不同勘畔。在使用call()方法時(shí)所灸,傳遞給函數(shù)的參數(shù)必須逐個(gè)列出來
bind()方法會創(chuàng)建一個(gè)函數(shù)的實(shí)例炫七,其this值會被綁定到傳給bind()函數(shù)的值爬立。