深入浅析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 extend 的简单实例
Sep 18 Javascript
在父页面得到zTree已选中的节点的方法
Feb 12 Javascript
js仿腾讯QQ的web登陆界面
Aug 19 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
很酷的星级评分系统原生JS实现
Aug 25 Javascript
原生JS实现简单放大镜效果
Feb 08 Javascript
js实现随机点名小功能
Aug 17 Javascript
Vue axios设置访问基础路径方法
Sep 19 Javascript
微信小程序实现人脸识别登陆的示例代码
Apr 02 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 Javascript
vue-dplayer 视频播放器实例代码
Nov 08 Javascript
Angular处理未可知异常错误的方法详解
Jan 17 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学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
如何使用php输出时间格式
2013/08/31 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
url传递的参数值中包含&时,url自动截断问题的解决方法
2016/08/02 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
Python3里的super()和__class__使用介绍
2015/04/23 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
基于python实现把图片转换成素描
2019/11/13 Python
Django 自动生成api接口文档教程
2019/11/19 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
django使用多个数据库的方法实例
2021/03/04 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
文科生自我鉴定
2014/02/15 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
关于教师节的广播稿
2015/08/19 职场文书
Nginx快速入门教程
2021/03/31 Servers
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
浅谈python数据类型及其操作
2021/05/25 Python