您好,登錄后才能下訂單哦!
這篇“JS函數實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“JS函數實例分析”文章吧。
函數聲明和函數表達式有什么區別
函數聲明:functionbar(){}
函數表達式:varfuc=foo(){}
1.函數bar將會在整個程序執行前被hoist(提升),因此它在定bar函數的整個scope(作用域)中都是可用的。即使在函數定義之前調用它也沒問題。
2.對于函數聲明,函數的名稱是必須的,而對于函數表達式而言則是可選的,因此,就出現了匿名函數表達式和命名函數表達式。
3在這個函數里
varfoo=functionbar(){
bar();//Works};
bar();//ReferenceError命名函數bar賦值給了變量foo,所以在函數聲明外是不可見的,但在bar`函數內部仍然可以調用。這是因為Javascript對命名函數處理的機制,函數的名稱永遠在函數內部的作用域中有效。
什么是變量的聲明前置?什么是函數的聲明前置(**)
所謂的變量聲明前置就是在一個作用域塊中,所有的變量都被放在塊的開始出聲明。下面通過三段代碼舉例:
代碼1:
vara=1;
functionmain(){
console.log(a);//1
}
main();//輸出1`
代碼2:
1vara=1;
2functionmain(){
3console.log(a);
4vara=2;
5}
6main()//輸出undefined
代碼3:為什么代碼2會輸出undefined
1vara=1;
2functionmain(){
3vara;
4console.log(a);
5a=2;
6}
函數的聲明前置就是把整個函數提升到當前作用域的最前面(位于前置的變量聲明后面)。
varnum=1;
console.log(doubleNum(num));//2
functiondoubleNum(num){returnnum2;}
等價于
//函數的聲明前置
varnum;
functiondoubleNum(num){returnnum2;}
num=1;
console.log(doubleNum(num));//2
arguments是什么(*)
arguments是一個類數組對象。代表傳給一個function的參數列表。可以在函數內部通過使用arguments對象來獲取函數的所有參數。這個對象為傳遞給函數的每個參數建立一個條目,條目的索引號從0開始。
函數的重載怎樣實現(**)
可以通過arguments的length和參數的類型來實現。例:
functionsumOfSquares(a,b,c){
if(arguments.length<3){
c=0;
}
returnaa+bb+c*c
}
sumOfSquares(2,3,4);//29
sumOfSquares(1,3);//10
立即執行函數表達式是什么?有什么作用(***)
立即執行函數通常有下面兩種寫法:
(function(){...})();
(function(){...}());//推薦使用
在Javascript中,一對圓括號“()”是一種運算符,跟在函數名之后,表示調用該函數。
什么是函數的作用域鏈
作用域就是變量和函數的可訪問范圍,控制著變量和函數的可見性與生命周期,在JavaScript中變量的作用域有全局作用域和局部作用域。
作用域鏈是當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈(scopechain,不簡稱sc)來保證對執行環境有權訪問的變量和函數的有序訪問。作用域第一個對象始終是當前執行代碼所在環境的變量對象(VO)
以上就是關于“JS函數實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。