深入浅析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 相关文章推荐
JQuery中关于jquery.js与jquery.min.js的比较探讨
May 15 Javascript
JavaScript中的this关键字介绍与使用实例
Jun 21 Javascript
如何设置一定时间内只能发送一次请求
Feb 28 Javascript
分享十五款 jQuery 社交网络分享插件
May 16 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 Javascript
解析浏览器端的AJAX缓存机制
Jun 21 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
Javascript 普通函数和构造函数的区别
Nov 05 Javascript
js和jquery中获取非行间样式
May 05 jQuery
js使用swiper实现层叠轮播效果实例代码
Dec 12 Javascript
使用异步controller与jQuery实现卷帘式分页
Jun 18 jQuery
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
Jan 16 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&mysql(二)
2006/10/09 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
php创建图像具体步骤
2017/03/13 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
PDO::inTransaction讲解
2019/01/28 PHP
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
Bootstrap在线电子商务网站实战项目5
2016/10/14 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
python批量制作雷达图的实现方法
2016/07/26 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python3 集合set入门基础
2020/02/10 Python
Python打印不合法的文件名
2020/07/31 Python
高校自主招生自荐信
2013/12/09 职场文书
机电一体化自荐信
2013/12/10 职场文书
保证书格式范文
2014/04/28 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
2015年校长新年寄语
2014/12/08 职场文书
学期个人工作总结
2015/02/13 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
导游词之无锡梅园
2019/11/28 职场文书
windows系统搭建WEB服务器详细教程
2022/08/05 Servers