1、函數(shù)聲明與函數(shù)表達(dá)式的區(qū)別
? ? 函數(shù)聲明可以將函數(shù)的使用提升到函數(shù)所在語(yǔ)句之前,而函數(shù)表達(dá)式則不行,必須要在函數(shù)所在語(yǔ)句之后使用贝乎,否則會(huì)報(bào)“unexpected identifier”錯(cuò)誤。
以下是實(shí)例:
(1)a()闪水;//? 正確運(yùn)行糕非,返回hello
? ? function a (){
? ? ? ? return “hello”
? ? }
(2)a(); //報(bào)錯(cuò)unexcepted identify
? ? ? ? var a = function (){
? ? ? ? ? return “hello”
? ? ? ? }
2球榆、函數(shù)內(nèi)部屬性,arguments和this
(1)arguments: 是一個(gè)類(lèi)數(shù)組對(duì)象禁筏,包含著傳入函數(shù)中的所有參數(shù)持钉,主要用來(lái)保存函數(shù)參數(shù),它有一個(gè)叫callee的屬性篱昔,callee是一個(gè)指針每强,指向擁有這個(gè)arguments對(duì)象的函數(shù)始腾;
(2)this:函數(shù)執(zhí)行的環(huán)境對(duì)象(js中的一個(gè)重點(diǎn),會(huì)單獨(dú)分析)
3空执、apply()和call()
apply()和call()是每個(gè)函數(shù)都包含的兩個(gè)非繼承而來(lái)的方法浪箭,call和apply最大的用途是用來(lái)綁定函數(shù)的this指向,這樣做的好處是解除對(duì)象和方法之間的耦合辨绊。
apply()和call()存在的唯一區(qū)別就是傳參方式不同奶栖,call()必須明確的傳入每一個(gè)參數(shù),形如say.call(this, 參數(shù)1门坷,參數(shù)2宣鄙,參數(shù)3,...)默蚌,而apply()則可以直接傳入arguments對(duì)象或數(shù)組冻晤,如say.apply(this, arguments)或say.apply(this, [參數(shù)1,參數(shù)2绸吸,參數(shù)3鼻弧,...])