深入浅析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 连续列表实现代码
Dec 21 Javascript
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
JS实现的一个简单的Autocomplete自动完成例子
Apr 16 Javascript
JavaScript中解析JSON数据的三种方法
Jul 03 Javascript
javascript实现图片上传前台页面
Aug 18 Javascript
基于JS实现PHP的sprintf函数实例
Nov 14 Javascript
JS重载实现方法分析
Dec 16 Javascript
JavaScript仿聊天室聊天记录
Dec 27 Javascript
详解webpack 入门与解析
Apr 09 Javascript
你应该了解的JavaScript Array.map()五种用途小结
Nov 14 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
Jan 09 Javascript
Element Notification通知的实现示例
Jul 27 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
jquery中的查找parents与closest方法之间的区别
2013/12/02 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
python实现简单的socket server实例
2015/04/29 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
社区庆八一活动方案
2014/02/02 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
优秀高中学生评语
2014/12/30 职场文书
导游欢迎词范文
2015/01/23 职场文书