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()构造函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。