深入浅析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 相关文章推荐
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
javascript URL编码和解码使用说明
Apr 12 Javascript
奉献给JavaScript初学者的编写开发的七个细节
Jan 11 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
Feb 16 Javascript
javascript对中文按照拼音排序代码
Aug 20 Javascript
d3.js入门教程之数据绑定详解
Apr 28 Javascript
ReactNative页面跳转Navigator实现的示例代码
Aug 02 Javascript
ReactJs实现树形结构的数据显示的组件的示例
Aug 18 Javascript
javascript中的replace函数(带注释demo)
Jan 07 Javascript
Vue用v-for给src属性赋值的方法
Mar 03 Javascript
vue 国际化 vue-i18n 双语言 语言包
Jun 07 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 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
php5 and xml示例
2006/11/22 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
2017/02/12 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
nohup的用法
2012/11/26 面试题
运动会广播稿200米
2014/01/27 职场文书
教师业务培训方案
2014/05/01 职场文书
保护环境倡议书100字
2014/05/19 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
文明旅游倡议书
2015/04/28 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android