深入浅析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 相关文章推荐
javascript addBookmark 加入收藏 多浏览器兼容
Aug 15 Javascript
style、 currentStyle、 runtimeStyle区别分析
Aug 01 Javascript
Javascript原型链和原型的一个误区
Oct 22 Javascript
jQuery实现的支持IE的html滑动条
Mar 16 Javascript
javascript原始值和对象引用实例分析
Apr 25 Javascript
javascript实现动态显示颜色块的报表效果
Apr 10 Javascript
Vue2.0如何发布项目实战
Jul 27 Javascript
解决ie img标签内存泄漏的问题
Oct 13 Javascript
微信小程序实现天气预报功能
Jul 18 Javascript
opencv 识别微信登录验证滑动块位置
Aug 07 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 Javascript
如何在Express4.x中愉快地使用async的方法
Nov 18 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
PHP编程网上资源导航
2006/10/09 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
vue调用本地摄像头实现拍照功能
2020/08/14 Javascript
使用Python解析JSON数据的基本方法
2015/10/15 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
python 录制系统声音的示例
2020/12/21 Python
SQL Server笔试题
2012/01/10 面试题
创业计划书撰写原则
2014/01/25 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
慰问信模板
2015/02/14 职场文书
安全生产先进个人总结
2015/02/15 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
nginx rewrite功能使用场景分析
2022/05/30 Servers