function 和 new Function的区别

本文详细介绍了JavaScript中的Function构造函数,包括其动态创建和编译函数的能力、执行效率的影响因素、词法作用域与全局作用域的区别等。文章还对比了Function与其他函数定义方式的不同之处,并解释了Function构造函数为何总是使用全局作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

转载于:https://www.cnblogs.com/jtjds/articles/5795859.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值