本文就javascript函數定義的常見問題進行了總結。包含了初學者常犯的錯誤。分享給大家供大家參考。具體總結如下:
1. 函數聲明的同時JS引擎還定義了一個與函數名同名的變量,我們在調用這個函數的時候實際上是在使用這個變量,且它可以在函數聲明之前調用,例如
foo(); //這裡實際上是使用了一函數變量 function foo() { alert('hello'); }
2. 函數表達式,此時將匿名函數賦值給了一變量,此變量需在定義後使用,例如
foo(); //報錯,未定義 var foo = function() { alert('hello'); }
3. 函數表達式(with函數名),這種用法最好避免,此時非IE浏覽器中該函數名只在內部可用,例如
bar(5); //報錯,未定義 var bar = function foo(n) { if (n == 1) return 1; else return n * foo(n - 1); } foo(5); //非IE報錯,未定義 bar(5); //正確
4. 用Function構造函數定義,這種方式效率低,每次執行函數的時候,其函數體都會被解析一次。此外這樣聲明的函數是不會繼承當前聲明位置的作用域,它默認只會擁有全局作用域,例如
function foo() { var bar = 'hello'; return Function('alert(bar)'); //報錯,全局變量bar未定義 } foo()();
相信本文所述對大家javascript WEB程序設計的學習有一定的借鑒價值。