深入浅析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 相关文章推荐
如何简单地用YUI做JavaScript动画
Mar 10 Javascript
仿服务器端脚本方式的JS模板实现方法
Apr 27 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
May 12 Javascript
一个封装js代码-----展开收起效果示例
Jul 03 Javascript
js实现目录定位正文示例
Nov 14 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
Aug 24 Javascript
详解vue项目中使用token的身份验证的简单实践
Mar 08 Javascript
JavaScript Math对象和调试程序的方法分析
May 13 Javascript
layui form表单提交之后重新加载数据表格的方法
Sep 11 Javascript
小程序实现背景音乐播放和暂停
Jun 19 Javascript
Vue-cli 移动端布局和动画使用详解
Aug 10 Javascript
Postman环境变量全局变量使用方法详解
Aug 13 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
mysql limit查询优化分析
2008/11/12 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
jQuery动画animate方法使用介绍
2013/05/06 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python中用format函数格式化字符串的用法
2015/04/08 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
详解KMP算法以及python如何实现
2020/09/18 Python
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
公司司机岗位职责
2014/02/07 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
就业意向协议书
2015/01/29 职场文书
武当山导游词
2015/02/03 职场文书
2015年个人思想总结
2015/03/09 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript