首頁 >web前端 >html教學 >深入分析JS函數

深入分析JS函數

php中世界最好的语言
php中世界最好的语言原創
2018-03-08 15:31:101678瀏覽

這次帶給大家深入分析JS函數,函數宣告和函數表達式有什麼不同?使用JS函數的注意事項有哪些,以下就是實戰案例,一起來看一下。

函數宣告和函數表達式有什麼不同(*)

函數宣告:function bar() {}
函數表達式:var fuc = foo(){}
1.函數bar將會在整個程式執行前被hoist(提升),因此它在定bar函數的整個scope (作用域)中都是可用的。即使在函數定義之前呼叫它也沒問題。
2.對於函數聲明,函數的名稱是必須的,而對於函數表達式而言則是可選的,因此,就出現了匿名函數表達式和命名函數表達式。
3在這個函數裡

var foo = function bar() {
bar(); // Works};
bar(); // ReferenceError命名函数bar赋值给了变量foo,所以在函数声明外是不可见的,但在bar`函数内部仍然可以调用。这是因为Javascript对命名函数处理的机制,函数的名称永远在函数内部的作用域中有效。

什麼是變數的宣告前置?什麼是函數的宣告前置 (**)

所謂的變數宣告前置就是在一個作用域區塊中,所有的變數都被放在區塊的開始出宣告。以下透過三段程式碼舉例:
程式碼1:

var a = 1;
function main() {
console.log(a);//1
}
main();//输出1`

程式碼2:

1 var a = 1;
2 function main() {
3  console.log(a);
4 var a = 2;
5 }
6 main()//输出undefined

程式碼3:為什麼程式碼2會輸出undefined





1 var a = 1;
2 function main() {
3 var a;
4  console.log(a);
5 a = 2;
6 }

函數的宣告前置就是把整個函數提升到目前作用域的最前面(位於前置的變數宣告後面)。

var num = 1;
console.log(doubleNum(num));//2
function doubleNum(num){ return num2;}

等價於

//函数的声明前置
var num;
function doubleNum(num){ return num2;}
num = 1;
console.log(doubleNum(num));//2

arguments 是什麼 (*)

arguments 是一個類別陣列物件。代表傳給一個function的參數清單。可以在函數內部透過使用 arguments物件來取得函數的所有參數。這個物件為傳遞給函數的每個參數建立一個條目,條目的索引號碼從 0 開始。

函數的重載怎麼實作 (**)

可以透過arguments的length和參數的型別來實作。例:

function sumOfSquares(a, b, c){
if(arguments.length<3){
c = 0;
}
return aa+bb+c*c
}
sumOfSquares(2,3,4);   // 29
sumOfSquares(1,3);   // 10
立即執行函數表達式是什麼?有什麼作用(***)

立即執行函數通常有以下兩種寫法:

(function(){...})();(function(){ .. .}());//建議使用在Javascript中,一對圓括號「()」是一種運算符,跟在函數名稱之後,表示呼叫該函數。
參考-JavaScript中的立即執行函數

什麼是函數的作用域鏈(****)作用域就是變數和函數的可存取範圍,控制變數和函數的可見性與生命週期,在JavaScript中變數的作用域有全域作用域和局部作用域。
作用域鍊是當程式碼在一個環境中執行時,會建立變數物件的一個作用域鏈(scope chain,不簡稱sc)來保證對執行環境有權存取的變數和函數的有序存取。作用域第一個物件總是目前執行程式碼所在環境的變數物件(VO)

###相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章! ######相關閱讀:#########怎麼用CSS3製作登入框################JavaScript陣列-字串-數學函數### ############JS的Dom與事件小結##########

以上是深入分析JS函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn