深入浅析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 xml为数据源的下拉框控件
Jul 07 Javascript
一个js的tab切换效果代码[代码分离]
Apr 11 Javascript
confirm的用法示例用于按钮操作时确定是否执行
Jun 19 Javascript
js判断滚动条是否已到页面最底部或顶部实例
Nov 20 Javascript
js改变embed标签src值的方法
Apr 10 Javascript
JavaScript获取当前cpu使用率的方法
Dec 15 Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 Javascript
Javascript随机标签云代码实例
Jun 21 Javascript
ztree实现权限横向显示功能
May 20 Javascript
详解使用jest对vue项目进行单元测试
Sep 07 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
May 18 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
Jun 04 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面向对象值单例模式
2016/05/03 PHP
购物车选中得到价格实现示例
2014/01/26 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
python正则表达式之作业计算器
2016/03/18 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python探索之URL Dispatcher实例详解
2017/10/28 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
考试不及格检讨书
2014/01/09 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
MySQL 常见存储引擎的优劣
2021/06/02 MySQL