深入浅析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 相关文章推荐
从新浪弄下来的全屏广告代码 与使用说明
Mar 15 Javascript
jquery $.ajax入门应用一
Nov 19 Javascript
基于JQuery的Pager分页器实现代码
Jul 17 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
input点击后placeholder中的提示消息消失
Jan 15 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
基于AngularJS实现iOS8自带的计算器
Sep 12 Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 Javascript
JavaScript 高性能数组去重的方法
Sep 20 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
Jan 28 Javascript
JavaScript中document.activeELement焦点元素介绍
Nov 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生成固定长度纯数字编码的方法
2015/07/09 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
vue-ajax小封装实例
2017/09/18 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
轻松实现python搭建微信公众平台
2016/02/16 Python
python使用str & repr转换字符串
2016/10/13 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
露营世界:Camping World
2017/02/02 全球购物
2014年端午节活动方案
2014/03/11 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
2015年端午节活动总结
2015/02/11 职场文书
docker-compose部署Yapi的方法
2022/04/08 Servers