函数的语法:

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

最新文章

  1. 【java】jstack
  2. 在IE11下设置SharePoint Server 2013却遇到“需要 Internet Explorer 才能使用此功能。”的解决办法
  3. Shell 编程基础之注意技巧
  4. 上传项目的更改 info.plist文件
  5. jsp+bean+servlet 案例代码
  6. 7.Knockout.Js(Mapping插件)
  7. STL源码分析读书笔记--第三章--迭代器(iterator)概念与traits编程技法
  8. ubuntu下opencv 3.0和python2.7安装测试
  9. BZOJ3122 随机数生成器
  10. STM32 枚举类型和结构体的使用
  11. javascript第七课js函数
  12. ViewPager + HorizontalScrollView 实现可滚动的标签栏
  13. OpenCV 基础知识------图像创建、访问、转换
  14. 安装rabbitmq以及集群配置
  15. Java--向数据库添加txt文件中的批量数据
  16. Python爬虫入门教程 59-100 python爬虫高级技术之验证码篇5-极验证识别技术之二
  17. SpringMvc中Hashmap操作遇到 java.util.ConcurrentModificationException: null
  18. 基于centos7下appium环境搭建
  19. LeetCode(69):x 的平方根
  20. 解决android 9上无法使用http协议

热门文章

  1. Java工程师学习指南第3部分:Spring与SpringMVC源码解析
  2. 【编程开发】非对称加密过程详解(基于RSA非对称加密算法实现)
  3. 【VS开发】四大图像库:OpenCV/FreeImage/CImg/CxImage
  4. JavaScript里的类和继承(转)
  5. redis的事物操作
  6. 顺序表的基本操作【c语言】【创建、插入、删除、输出】
  7. jqGrid清空表格
  8. DDL数据库对象管理
  9. 剑指offer37:统计一个数字在排序数组中出现的次数
  10. 前端vue组件传参