new Function()语法
2024-10-06 18:24:13
函数的语法:
let func = new Function(...args, body);
历史原因,参数也可以以逗号分隔的列表的形式给出,这三个意思相同:
new Function('a', 'b', 'return a + b'); // 基础语法
new Function('a,b', 'return a + b'); // 逗号分隔
new Function('a , b', 'return a + b'); // 逗号加空格分隔
使用new Function创建的函数,其[[Environment]]引用全局词法环境,而不是包含该函数的外部词法环境。因此,他们不能使用外层的变量。
但这确实很好,因为它可以使我们免于错误。明确地传递参数在架构上是一种更好的方法,并且不会在使用minifiers时不会产生问题。
这是一个有两个参数的函数:
let sum = new Function('a', 'b', 'return a + b');
alert( sum(1, 2) ); //
闭包(Closure)
通常,函数将它所创建的位置记录在特殊属性[[Environment]]中。 它引用了创建地点的词法环境。
但是当使用new Function()创建函数时,其[[Environment]]不是引用当前的词法环境,而是引用全局环境。
function getFunc() {
let value = "test";
let func = new Function('alert(value)');
return func;
}
getFunc()(); // error: value is not defined
最新文章
- 【java】jstack
- 在IE11下设置SharePoint Server 2013却遇到“需要 Internet Explorer 才能使用此功能。”的解决办法
- Shell 编程基础之注意技巧
- 上传项目的更改 info.plist文件
- jsp+bean+servlet 案例代码
- 7.Knockout.Js(Mapping插件)
- STL源码分析读书笔记--第三章--迭代器(iterator)概念与traits编程技法
- ubuntu下opencv 3.0和python2.7安装测试
- BZOJ3122 随机数生成器
- STM32 枚举类型和结构体的使用
- javascript第七课js函数
- ViewPager + HorizontalScrollView 实现可滚动的标签栏
- OpenCV 基础知识------图像创建、访问、转换
- 安装rabbitmq以及集群配置
- Java--向数据库添加txt文件中的批量数据
- Python爬虫入门教程 59-100 python爬虫高级技术之验证码篇5-极验证识别技术之二
- SpringMvc中Hashmap操作遇到 java.util.ConcurrentModificationException: null
- 基于centos7下appium环境搭建
- LeetCode(69):x 的平方根
- 解决android 9上无法使用http协议