函數定義方法多種 : 1function f(x){ (語句編製函數) 2 函數直接量直接生成 3 Function()構造函數 return x; var f=function(x){return x;} var f=new Function(){"x","return x;"} } var n= ...
函數定義方法多種 :
1function f(x){ (語句編製函數) 2 函數直接量直接生成 3 Function()構造函數
return x; var f=function(x){return x;} var f=new Function(){"x","return x;"}
}
var n=1; var n=1; var n=1;
function f(){ function f(){ function f(){
var n=2; var n=s; var n=s;
function e(){ return n;} var e= function(){return n;} var e=new Function(){return n;}
return e; return e; return e;
} } }
alert(f()());返回2 ( 函數作用域 ) alert(f()());返回2 alert(f()()); 返回1(頂級作用域)
從解析機制來說:javascript在解釋代碼時,並非一行一行的解析和執行,他會一段一段的分析執行<script></script>,再同一段代碼中首先提前function語句函數和函數直接量定義的函數,優先執行,執行完之後才會接著執行其他代碼。而Funtion()構造函數不會提前執行,是在運行時執行,所以他擁有頂級作用域,而不會被限制在函數本身,
從時間角度看,Function()構造函數具有動態特性,
這樣也會帶來缺點,從執行效率看,當把1,2函數和3函數放在迴圈結構時,1,2函數只需要解析自己直接執行,而3每次執行都需要動態編譯一次,效果明顯。
由於Function()構造函數不需要額外變數,他們直接在表達式中參與運算,從而節省資源,這些函數運行完畢即被釋放。
若有錯誤,歡迎討論!