今天准备吐槽一下Function构造函数。

我们知道,不管是函数声明还是函数表达式都是基于词法作用域的,明白这点在闭包中十分重要,譬如:

var a='global';
function foo(){var a='local';return function(){console.log(a);}
}
foo()();   // local

根据词法作用域规则,函数所能访问的变量取决于它声明的位置,以上面的例子,函数沿作用域链查找,找到第一个变量a就停止查找(即找到局部变量a就停止查找,并不会继续查找全局变量a),所以理所当然输出'local',即局部变量a的值。

但是!但是比较奇葩的是,Function构造函数并不是基于词法作用域的,它向往的是全局作用域(傲娇。。。):

var a='global';
function foo(){var a='local';return new Function('console.log(a)');
}foo()();    // global

你看,它输出的是全局的a值。

哎,实际上你可以把Function构造函数看成全局作用域运行的eval(),不过,既然Function构造函数这么奇葩,实际应用会很少啦。。。。况且,可能还会影响性能。

转载于:https://www.cnblogs.com/linweinb/p/8567997.html

呵呵!Function构造函数相关推荐

  1. 使用 function 构造函数创建组件和使用 class 关键字创建组件

    使用 function 构造函数创建组件: 如果想要把组件放到页面中,可以把构造函数的名称,当作 组件的名称,以 HTML标签形式引入页面中, 因为在React中,构造函数就是一个最基本的组件. 注意 ...

  2. JavaScript中的工厂函数vs构造函数vs class

    原文链接:JavaScript Factory Functions vs Constructor Functions vs Classes 作者:Eric Elliott 译者:sunny 转载需提前 ...

  3. 《javascript高级程序设计》笔记:Function类型

    这么长时间没有写博客,就是因为函数这部分比较麻烦,自己一直想抽出大把的时间来研究这个,可是结果却是一拖再拖,这样不好.有时间就写才是王道啊,不然这计划得一直卡在这里了.. 1. 几个概念 函数:将代码 ...

  4. Javascript学习之函数(function)

    http://www.cnblogs.com/royalroads/p/4418587.html 在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其 ...

  5. JavaScript学习随记——Function

    每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会于某个函数绑定. 函数的定义方式 <script ...

  6. 菜鸟教程 之 JavaScript 函数(function)

    From:https://www.runoob.com/js/js-function-definition.html JavaScript 函数定义 JavaScript 使用关键字 function ...

  7. object htmldivelement什么意思_深入探究 Function amp; Object 鸡蛋问题

    (给前端树加星标,提升前端技能) 转自:高级前端进阶 引言 上篇文章用图解的方式向大家介绍了原型链及其继承方案,在介绍原型链继承的过程中讲解原型链运作机制以及属性遮蔽等知识,今天这篇文章就来深入探究下 ...

  8. JS-对象-构造函数-实例化-this

    JS-对象-构造函数-实例化-this 1 回顾 1. 定义函数的方式function 关键字表达式方式Function 构造函数2. 函数的调用和返回值3. 函数的参数形参和实参形参的默认值argu ...

  9. Function与Object

    Function与Object JavaScript中内置了两个顶级对象Function.Object,Object是所有对象的基类,而所有的构造函数同时又是Function对象的实例. Object ...

最新文章

  1. JAVA方法中的参数用final来修饰的效果
  2. SAP QM初阶执行事务代码QDB1,报错- Sampling procedure NM000001 has no sampling scheme-
  3. 【Python基础】如何用Pandas处理文本数据?
  4. java学习(95):线程的优先级
  5. python文件和数据的格式化_Python在文本文件中格式化特定数据
  6. 组态王串口服务器虚拟串口,串口服务器USR-N520连接组态王设置步骤
  7. mysql增量备份及恢复解决方案
  8. 【Python】Python3.7.3 - Python命令行参数详解
  9. docker项目部署 php_使用Docker部署PHP开发环境的方法详解
  10. linux resin mysql_【转】Linux下Resin+JSP+MySQL的安装和配置
  11. HTTP错误状态码详解
  12. 华为手机天气小工具误删/移除/丢失/不见了怎么办?
  13. CRC循环冗余校验码
  14. 海外引流怎么做?巨象指纹浏览器助你,人人都是产品经理
  15. Windows7 Embedded Standard x64更新代码80072EFE解决方法
  16. docker实战学习2022版本(七)之docker网络学习
  17. Visual Studio 2019 许可证过期解决方法
  18. Linux系统使用userdel命令删除用户
  19. 【安全牛学习笔记】COWPATTY 破解密码
  20. java 自动识别并解压HDFS压缩文件

热门文章

  1. linux文件 run.man,【Linux】linux经常使用基本命令
  2. 手机热点总是正在连接服务器,手机热点用不了?可以尝试这个方法。
  3. oracle 授权 增删改查权限_Oracle增删改查与函数
  4. python安装pygame模块_windows下 python 如何安装pygame模块
  5. c语言的输入函数有哪些
  6. C语言*运算符和运算符
  7. java api 1.6 下载_Java JDK API
  8. linux wordpress伪静态,wordpress程序在win和Linux系统下的伪静态设置 - 张力博客
  9. pat 乙级 1033 旧键盘打字(C++)
  10. 【渝粤教育】国家开放大学2018年秋季 0553-21T色彩 参考试题