深入浅析JS Function()构造函数


Posted in Javascript onAugust 22, 2016

js中function对象是一个令人着迷的东西,但由于他太过于灵活,常常令人迷惑.

先给大家看个代码片段。

var scope="global";
function constructFunction(){
var scope="local";
return new Function(" return scope");
}
constructFunction()();
 function constructFunction2(){
var scope="local";
return function(){
return scope;
}
}
constructFunction2()();

   看到这两个你的第一感觉是什么?都返回 "local"??,如果是这样的话就需要好好看一下下面的讲解了。constructFunction2()了解闭包的就应该很容易的知道答案 是"local",这里就不细讲了。下面我着重讲一下constructFunction()的情况。

这里用到了 Function()构造函数, Function()构造函数虽然不是很常用,但是了解一下还是很有必要的。

不管是通过函数定义语句还是函数直接量表达式,函数的定义都要使用 function()关键字。单函数还可以通过Function()构造函数来定义,比如:

 var f=new Function("x","y","return x*y");

这一行的实际效果和下面的一行代码是等价的。

var f=function(x,y){x*y};

   Function()构造函数可以传入任意数量的字符串实参,最后一个实参所表示的文本是函数体;它可以包含任意的Javascript 语句,每条语句之间用分号分割。传入构造函数的其他所有的实参字符串是指定函数的名字的字符串。如果定义的函数不包含任何参数,只需给构造函数简单地传入 一个字符串函数体即可。

关于Function()构造函数需要特别注意一下几点:

1.Function()构造函数允许JavaScript在运行时动态的创建并编译函数。

2.每次调用Function()构造函数都会解析函数体,并创建新的函数对象。如果是在一个循环或者多次调用的函数中执行这个构造函数,执行效率会受到影响。相比之下,循环中的嵌套函数和函数定义表达式则不会每次执行时都重新编译。

2.最后的一点,也是关于Function()构造函数非常重要的一点,就是它所创建的函数并不使用词法作用域,相反,函数体代码的编译总是会在顶层函数执行。看完这一点,上面的函数constructFunction()();返回“global”应该很容易理解了吧?

以上所述是小编给大家介绍的JS Function()构造函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于jquery的合并table相同单元格的插件(精简版)
Apr 05 Javascript
Node.js中对通用模块的封装方法
Jun 06 Javascript
AngularJS使用ngMessages进行表单验证
Dec 27 Javascript
全面了解javascript中的错误处理机制
Jul 18 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
Aug 02 Javascript
Move.js入门
Feb 08 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
JavaScript编程设计模式之构造器模式实例分析
Oct 25 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
Aug 08 Javascript
过滤器vue.filters的使用方法实现
Sep 18 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
Nov 29 Javascript
JavaScript 防盗链的原理以及破解方法
Dec 29 Javascript
深入浅析jQuery对象$.html
Aug 22 #Javascript
基于JavaScript实现添加到购物车效果附源码下载
Aug 22 #Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 #Javascript
jQuery使用deferreds串行多个ajax请求
Aug 22 #Javascript
JavaScript代码里的判断小结
Aug 22 #Javascript
angularjs 源码解析之scope
Aug 22 #Javascript
js表单元素checked、radio被选中的几种方法(详解)
Aug 22 #Javascript
You might like
一步一步学习PHP(3) php 函数
2010/02/15 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
JavaScript中this详解
2015/09/01 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
JS实现多功能计算器
2020/10/28 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
Python操作SQLite简明教程
2014/07/10 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
python3 map函数和filter函数详解
2019/08/26 Python
django框架创建应用操作示例
2019/09/26 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
python实现简单遗传算法
2020/09/18 Python
小车司机岗位职责
2013/11/25 职场文书
中层干部岗位职责
2013/12/18 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书