js题求教

w778800 2010-01-16 12:49:48
请说明下面代码执行后提示"global"还是"local"?为什么?
1 var y = "global";
2 function factory() {
3 var y = "local";
4 return new Function("return y");
5 }
6 alert(factory()());

运行结果是global 我想知道这是为什么? 另外我想知道Function问什么要大写?最后输出时为什么factory后有两个()?

本人小白 还望高手不吝赐教。谢谢
...全文
93 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
w778800 2010-01-16
  • 打赏
  • 举报
回复
谢谢2楼 明白了 也谢谢1楼和3楼
zhuhuaming 2010-01-16
  • 打赏
  • 举报
回复
楼上2为正解
qingralf 2010-01-16
  • 打赏
  • 举报
回复

var y = "global";
function factory() {
var y = "local";
return new Function("return y"); //返回一个方法体为return y的匿名函数
}
alert(factory()()); //由于factory返回的是return y的一个匿名函数,再加()表示执行该函数
//上句等于 alert(y);执行的时候,可见的y只有一个全局的y.

区别与

var y = "global";
function factory() {
var y = "local";
return y;
}
alert(factory());

//再看看下面结果.return y 是在混淆你


var y = "global";
function factory() {
var y = "local";
return new Function("a=1;b=2;return a+b");
}
alert(factory()());
蛋黄车 2010-01-16
  • 打赏
  • 举报
回复
个人理解:

var y = "global"; //这个是定义在JS中的全局变量。

function factory() {
var y = "local"; //这里是局部变量
return new Function("return y");
//因为JS中没有这个方法,所以我的理解是它调用的是整个的JS脚本,返回的y是全局的y
}
alert(factory()()); //两个()表示的是调用factory()方法里面的Function()方法

以上纯属个人理解,还请高手指正



发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2010-01-16 12:49
社区公告
暂无公告