深入浅析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实例教程(19) 使用HoTMetal(3)
Dec 23 Javascript
javascript函数库-集合框架
Apr 27 Javascript
javascript简单性能问题及学习笔记
Feb 04 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
Bootstrap实现水平排列的表单
Jul 04 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
Aug 09 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
Apr 27 jQuery
通俗解释JavaScript正则表达式快速记忆
Aug 23 Javascript
Vue组件的使用教程详解
Jan 05 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
Mar 13 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
Aug 27 Javascript
wx-charts 微信小程序图表插件的具体使用
Aug 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
一个多文件上传的例子(原创)
2006/10/09 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
基于Tensorflow高阶读写教程
2020/02/10 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
python通过cython加密代码
2020/12/11 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
旷课检讨书1000字
2014/02/14 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
市场营销计划书范文
2015/01/16 职场文书
服务承诺书
2015/01/19 职场文书
服装店员工管理制度
2015/08/07 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书