函数定义方法多种 :
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()构造函数不需要额外变量,他们直接在表达式中参与运算,从而节省资源,这些函数运行完毕即被释放。
若有错误,欢迎讨论!