深入浅析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 在网页中的运用(asp.net)
Nov 23 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
Nov 25 Javascript
浅谈javascript 函数表达式和函数声明的区别
Jan 05 Javascript
AngularJS ng-app 指令实例详解
Jul 30 Javascript
Javascript从数组中随机取出不同元素的两种方法
Sep 22 Javascript
基于JavaScript实现Tab选项卡切换效果
Nov 24 Javascript
使用jQuery实现动态添加小广告
Jul 11 jQuery
vuex中使用对象展开运算符的示例
Sep 25 Javascript
jquery ztree实现右键收藏功能
Nov 20 jQuery
Vue.js+Layer表格数据绑定与实现更新的实例
Mar 07 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 Javascript
vue-cli4项目开启eslint保存时自动格式问题
Jul 13 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实现的简单美国商品税计算函数
2015/07/13 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
JavaScript的Function详细
2006/11/14 Javascript
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
编写Python CGI脚本的教程
2015/06/29 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
教师学习培训邀请函
2014/02/04 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
公司保密承诺书
2014/03/27 职场文书
务虚会发言材料
2014/12/25 职场文书
岳麓书院导游词
2015/02/03 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers
使用Django框架创建项目
2022/06/10 Python