博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用function和Function定义函数的区别

Posted on 2013-06-11 17:10  Amy-lover  阅读(380)  评论(0编辑  收藏  举报

我们先来看下面的两个例子

var n=1;
function f(){
    var n=2;
    var e=function(){
        return n;
    };
    return e;
}
alert(f()());//2

 

var n=1;
function f(){
    var n=2;
    var e=new Function("return n;");
    return e;
}
alert(f()());//1

 原因如下:JS解释器在解析代码时,并不是一行行地分析执行函数,而是一段一段地分析执行函数,在同一段代码中,使用function语句和函数直接量定义的函数结构总会被提取出来优先执行,只有当函数被解析和执行完毕后,才会按照顺序执行其他代码行,但是对于使用Function构造函数定义的函数并非提前执行,而是在运行时被动态地执行的,因此Function构造函数定义的函数具有顶级作用域

执行效率方面的差异:JS解释器首先把function语句定义的函数提取出来进行编译,这样每次执行该函数时,就不再从头开始重新编译该函数对象,而Function构造函数定义的函数每次执行时都需要动态编译一次,因此效率较function非常低。

Function函数不需要额外的变量,直接在表达式中参与运算,从而节省了资源,避免了使用function语句定义函数占用内存的弊端,因此该函数运行完毕就释放内存空间