深入浅析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 Autocomplete 结合asp.net使用要点
Oct 29 Javascript
JS获取整个页面文档的实现代码
Dec 15 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
Jan 24 Javascript
jquery实现省市select下拉框的替换(示例代码)
Feb 22 Javascript
JS更改select内option属性的方法
Oct 14 Javascript
基于javascript实现简单的抽奖系统
Apr 15 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
Feb 13 Javascript
微信小程序手势操作之单触摸点与多触摸点
Mar 10 Javascript
Vue开发环境中修改端口号的实现方法
Aug 15 Javascript
通过微信公众平台获取公众号文章的方法示例
Dec 25 Javascript
微信小程序中的列表切换功能实例代码详解
Jun 09 Javascript
区分vue-router的hash和history模式
Oct 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
用PHP制作静态网站的模板框架(二)
2006/10/09 PHP
PHP插入排序实现代码
2013/04/04 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
php基本函数汇总
2015/07/09 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
JS轮播图的实现方法
2020/08/24 Javascript
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
django框架cookie和session用法实例详解
2019/12/10 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
python温度转换华氏温度实现代码
2020/12/06 Python
总经理助理工作职责
2014/02/06 职场文书
暑假家长评语大全
2014/04/17 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
2015年体育教学工作总结
2015/05/20 职场文书