解析Funtion()构造函数

函数定义方法多种  : 

     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()构造函数不需要额外变量,他们直接在表达式中参与运算,从而节省资源,这些函数运行完毕即被释放。

 

若有错误,欢迎讨论!

转载于:https://www.cnblogs.com/takeern/p/5372054.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值