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()都会调用词法解析类似的东西。