函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 (*)
函數(shù)聲明:function bar() {}
函數(shù)表達(dá)式:var fuc = foo(){}
1.函數(shù)bar將會在整個程序執(zhí)行前被 hoist(提升),因此它在定bar函數(shù)的整個scope (作用域)中都是可用的。即使在函數(shù)定義之前調(diào)用它也沒問題。
2.對于函數(shù)聲明,函數(shù)的名稱是必須的,而對于函數(shù)表達(dá)式而言則是可選的,因此,就出現(xiàn)了匿名函數(shù)表達(dá)式和命名函數(shù)表達(dá)式。
3在這個函數(shù)里
var foo = function bar() {bar(); // Works};bar(); // ReferenceError命名函數(shù)bar賦值給了變量foo,所以在函數(shù)聲明外是不可見的,但在bar`函數(shù)內(nèi)部仍然可以調(diào)用。這是因?yàn)?a href='http://m.survivalescaperooms.com/tag/javajiexi_11110_1.html' target='_blank'>Javascript對命名函數(shù)處理的機(jī)制,函數(shù)的名稱永遠(yuǎn)在函數(shù)內(nèi)部的作用域中有效。什么是變量的聲明前置?什么是函數(shù)的聲明前置 (**)
所謂的變量聲明前置就是在一個作用域塊中,所有的變量都被放在塊的開始出聲明。下面通過三段代碼舉例:
代碼1:
var a = 1;function main() {console.log(a);//1main();//輸出1`代碼2:
1 var a = 1;2 function main() {3 console.log(a);4 var a = 2;6 main()//輸出undefined代碼3:為什么代碼2會輸出undefined
1 var a = 1;2 function main() {3 var a;4 console.log(a);5 a = 2;6 }函數(shù)的聲明前置就是把整個函數(shù)提升到當(dāng)前作用域的最前面(位于前置的變量聲明后面)。
var num = 1;console.log(doubleNum(num));//2function doubleNum(num){ return num2;}等價(jià)于
//函數(shù)的聲明前置var num;function doubleNum(num){ return num2;}num = 1;console.log(doubleNum(num));//2arguments 是什么 (*)
arguments 是一個類數(shù)組對象。代表傳給一個function的參數(shù)列表??梢栽诤瘮?shù)內(nèi)部通過使用 arguments對象來獲取函數(shù)的所有參數(shù)。這個對象為傳遞給函數(shù)的每個參數(shù)建立一個條目,條目的索引號從 0 開始。
函數(shù)的重載怎樣實(shí)現(xiàn) (**)
可以通過arguments的length和參數(shù)的類型來實(shí)現(xiàn)。例:
function sumOfSquares(a, b, c){if(arguments.length 3){c = 0;return aa+bb+c*csumOfSquares(2,3,4); // 29sumOfSquares(1,3); // 10立即執(zhí)行函數(shù)表達(dá)式是什么?有什么作用 (***)
立即執(zhí)行函數(shù)通常有下面兩種寫法:
(function(){...})();
(function(){ ...}());//推薦使用
在Javascript中,一對圓括號“()”是一種運(yùn)算符,跟在函數(shù)名之后,表示調(diào)用該函數(shù)。
參考-JavaScript中的立即執(zhí)行函數(shù)
什么是函數(shù)的作用域鏈 (****)
作用域就是變量和函數(shù)的可訪問范圍,控制著變量和函數(shù)的可見性與生命周期,在JavaScript中變量的作用域有全局作用域和局部作用域。
作用域鏈?zhǔn)钱?dāng)代碼在一個環(huán)境中執(zhí)行時(shí),會創(chuàng)建變量對象的一個作用域鏈(scope chain,不簡稱sc)來保證對執(zhí)行環(huán)境有權(quán)訪問的變量和函數(shù)的有序訪問。作用域第一個對象始終是當(dāng)前執(zhí)行代碼所在環(huán)境的變量對象(VO)
相信看了本文案例你已經(jīng)掌握了方法,更多精彩請關(guān)注php 其它相關(guān)文章!
相關(guān)閱讀:
怎樣用CSS3制作登錄框
JavaScript數(shù)組-字符串-數(shù)學(xué)函數(shù)
JS的Dom與事件小結(jié)
以上就是深入分析JS函數(shù)的詳細(xì)內(nèi)容,html教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答