深入浅析JS Function()构造函数

 更新时间:2016年08月22日 15:10:32   作者:学无止境-小于  
这篇文章给大家介绍了js function()构造函数的知识以及关于function()构造函数需要注意的几个要点,本文介绍的非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧

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()构造函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 微信小程序如何获取用户收货地址

    微信小程序如何获取用户收货地址

    这篇文章主要为大家详细介绍了微信小程序获取用户收货地址的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 百度空间的popup效果分析

    百度空间的popup效果分析

    自从用firefox浏览器以来,就几乎养成了一个习惯,就想用WebDeveloper把一些漂亮网站的js包括css给down下来分析一下,用来学习。
    2008-10-10
  • JS实现用户注册界面功能

    JS实现用户注册界面功能

    这篇文章主要为大家详细介绍了JS实现用户注册界面功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • ES6解构赋值的功能与用途实例分析

    ES6解构赋值的功能与用途实例分析

    这篇文章主要介绍了ES6解构赋值的功能与用途,结合实例形式分析了ES6结构赋值针对函数参数、赋值、json等相关操作使用技巧,需要的朋友可以参考下
    2017-10-10
  • 比较精简的Javascript拖动效果函数代码

    比较精简的Javascript拖动效果函数代码

    比较精简的Javascript拖动效果函数代码...
    2007-07-07
  • 浅谈javascript函数劫持[转自xfocus]

    浅谈javascript函数劫持[转自xfocus]

    javascript函数劫持,也就是老外提到的javascript hijacking技术。最早还是和剑心同学讨论问题时偶然看到的一段代码
    2008-02-02
  • zTree获取当前节点的下一级子节点数实例

    zTree获取当前节点的下一级子节点数实例

    下面小编就为大家带来一篇zTree获取当前节点的下一级子节点数实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 解决uni-app报错Error: read EBADF at Pipe . onStreamRead...

    解决uni-app报错Error: read EBADF at Pipe . onStreamRead...

    这篇文章主要介绍了uni-app报错Error: read EBADF at Pipe . onStreamRead...解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 如何解决java.lang.NumberFormatException: null异常

    如何解决java.lang.NumberFormatException: null异常

    这篇文章主要介绍了如何解决java.lang.NumberFormatException: null异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • JS时间戳与日期格式的转换小结

    JS时间戳与日期格式的转换小结

    这篇文章主要介绍了JS时间戳与日期格式的转换小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01

最新评论