1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 ?
函數(shù)聲明 function Name(){函數(shù)體}
函數(shù)表達(dá)式 var 變量=function (){}棉磨;
Javascript 中函數(shù)聲明和函數(shù)表達(dá)式是存在區(qū)別的,函數(shù)聲明在JS解析時(shí)進(jìn)行函數(shù)提升再悼,因此在同一個(gè)作用域內(nèi)育谬,不管函數(shù)聲明在哪里定義,該函數(shù)都可以進(jìn)行調(diào)用帮哈。而函數(shù)表達(dá)式的值是在JS運(yùn)行時(shí)確定,并且在表達(dá)式賦值完成后锰镀,該函數(shù)才能調(diào)用娘侍。
2.什么是變量的聲明前置?什么是函數(shù)的聲明前置泳炉?
- 所謂的變量聲明前置就是在一個(gè)作用域塊中憾筏,所有的變量都被放在塊的開(kāi)始出聲明
- 而函數(shù)的聲明前置因?yàn)镴S引擎 將函數(shù)名視同變量名,所以采用function命令聲明函數(shù)時(shí)花鹅,整個(gè)函數(shù)被提升到代碼頭部氧腰。采用賦值語(yǔ)句聲明函數(shù)時(shí),函數(shù)在原位置被聲明刨肃。
3.argument是什么古拴?
argument是一個(gè)類數(shù)組的對(duì)象≌嬗眩可以將參數(shù)傳入argument對(duì)象中黄痪,并且能調(diào)出數(shù)組的長(zhǎng)度,以及當(dāng)前函數(shù)的參數(shù)盔然。
4.函數(shù)的重載怎樣實(shí)現(xiàn)桅打?
允許在同一范圍中聲明幾個(gè)功能類似的同名函數(shù),但是這些同名函數(shù)的形式參數(shù)必須不同愈案。但在js中沒(méi)有函數(shù)重載的概念挺尾,因?yàn)榧词购瘮?shù)名相同,參數(shù)不同站绪,也被認(rèn)為是相同的函數(shù)遭铺。(例子1)
5.立即執(zhí)行函數(shù)表達(dá)式是什么?有什么作用
語(yǔ)法
(function sum(i){ })( );
(function sum(i){ }( ));
var a= function sum(i){ }( );
不必為函數(shù)命名恢准,避免污染全局變量
函數(shù)內(nèi)部形成了一個(gè)單獨(dú)的作用域掂僵,可以封裝一些外部無(wú)法讀取的私有變量。通常只對(duì)匿名函數(shù)使用顷歌。
6.什么是函數(shù)的作用域鏈
當(dāng)一個(gè)函數(shù)被調(diào)用時(shí)锰蓬,他先訪問(wèn)自身的變量,不存在時(shí)就回去訪問(wèn)父級(jí)函數(shù)的變量眯漩,知道訪問(wèn)全局變量為止芹扭。這種鏈?zhǔn)降倪^(guò)程稱為作用于鏈麻顶。只能從內(nèi)到外,不能從外到內(nèi)舱卡。