When the whole world is about to rain, let's make it clear in our heart together

热爱前端开发,专注于前端

function 和 new Function的区别

关于Function

1:Function()构造函数允许js在运行时动态地创建并编译函数。

2:每次调用Function()构造函数都会解析函数体,并创建新的函数对象,如果是在一个循环或者多次调用的函数中执行这个构造函数,执行效率会受影响。相比之下,循环中的嵌套函数和

函数定义表达式则不会每次执行时都重新编译。

3:Function()最重要一点就是:它所创建的函数并不是使用词法作用域,相反,函数体代码的编译总是会在顶层

函数执行。

  词法:即js解析代码的时候,根据function关键字来划分作用域。

4:通过Function()构造函数,所返回的函数使用的不是局部作用域,而是全局作用域。

此时打印出来的为:haox1

 

5:通常匿名函数的this指向是全局window。

 

如下所示的情况,匿名函数的作用域为window,所以输出为1.

6.闭包下的函数,作用域相当于是局部的。

此时打印出结果为:lili

 打印出的结果为:jiangting

7:为什么说Function()的作用域是全局的呢?

   由于new Function()中需要解析字符串,这个时候不能往当前作用域塞东西,但是可以往全局里面塞东西,进行update。通常new Function()和eval()都会调用词法解析类似的东西。

 

posted @ 2016-08-22 15:44  婷风  阅读(1772)  评论(0编辑  收藏  举报