深入浅析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获取下拉列表的值为null的解决方法
Mar 18 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
May 19 Javascript
js实现正方形颜色从下往上升的效果
Aug 04 Javascript
javascript动态生成树形菜单的方法
Nov 14 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
Jan 08 Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 Javascript
jQuery Ajax前后端使用JSON进行交互示例
Mar 17 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
vue+iview 兼容IE11浏览器的实现方法
Jan 07 Javascript
Javascript 关于基本类型和引用类型的个人理解
Nov 01 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 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下通过file_get_contents的代理使用方法
2011/02/16 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
var与Javascript变量隐式声明
2009/09/17 Javascript
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
预防煤气中毒方案
2014/06/16 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
出国签证在职证明
2014/09/20 职场文书
李强为自己工作观后感
2015/06/11 职场文书
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android