深入浅析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 相关文章推荐
JS input文本框禁用右键和复制粘贴功能的代码
Apr 15 Javascript
吐槽一下我所了解的Node.js
Oct 08 Javascript
js获取checkbox值的方法
Jan 28 Javascript
javascript实现一个简单的弹出窗
Feb 22 Javascript
关于iframe跨域POST提交的方法示例
Jan 15 Javascript
angular forEach方法遍历源码解读
Jan 25 Javascript
Node.js利用debug模块打印出调试日志的方法
Apr 25 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
Mar 28 Javascript
js数据类型检测总结
Aug 05 Javascript
JS动画实现回调地狱promise的实例代码详解
Nov 08 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
解决小程序无法触发SESSION问题
Feb 03 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
PHP脚本的10个技巧(5)
2006/10/09 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
php rsa加密解密使用详解
2015/01/14 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
Javascript中Eval函数的使用
2010/03/23 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
详解python读取和输出到txt
2019/03/29 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
python Gabor滤波器讲解
2020/10/26 Python
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
司马光教学反思
2014/02/01 职场文书
员工安全承诺书
2014/05/22 职场文书
2014年端午节演讲稿范文
2014/05/23 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
呐喊读书笔记
2015/06/30 职场文书
回复函格式及范文
2015/07/14 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书