Function()和function(){}有什么区别?

juxuyo 2012-08-15 10:06:24
直接看例子:


(function bb(){
var aa = 2;
(function(){
alert(aa); // 2
})();
})();



(function bb(){
var aa = 2;
Function("alert(aa)")(); // 报错,显示aa未定义
})();



如果说Function只能看到全局变量,那么下面的例子怎么解释啊?小弟迷糊了!!早上喝了点酒,不是犯傻了吧。。??


(function bb(){
var aa = 2;
Function("var bb = 3;")();
})();
alert(bb); // 报错,显示bb未定义
...全文
306 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pard521 2012-08-16
  • 打赏
  • 举报
回复
正解
[Quote=引用 8 楼 的回复:]
Function 它是对象 需要 new
[/Quote]
hhh305743261 2012-08-15
  • 打赏
  • 举报
回复
Function 它是对象 需要 new
anglechengd 2012-08-15
  • 打赏
  • 举报
回复

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<script type="text/javascript">
/**
LZ的问题出现在没有理解Function()的作用!
其实定义函数最原始的方法就是var fn=new Function("alert('hello world');");
其实Function是对一个对象(可以理解为一个类),用alert(fn instanceof Function)可以验证
Funcction()是Function的构造函数。
如果理解了上面的概念,来看下LZ的代码
*/

(function bb(){
var aa = 2;
(function(){
alert(aa); // 2
})();
})();

(function bb(){
var aa = 2;

//Function("alert(aa)")(); // 报错,显示aa未定义
//修改后
Function("var aa=123;alert(aa)")(); //这里调用了Function的构造函数,创建了一个函数对象
//将内部其实是:
/*
Function(){
var aa=123; LZ先前这里出现了问题,这个aa和函数里的aa没有半钱关系,如果想有关系请看我下面的代码
alert(aa);
}
*/

})();

(function cc(){
var aa=2;
Function("var aa="+aa+";alert(aa)")();

})();

</script>
<body>

</body>
</html>

未知数 2012-08-15
  • 打赏
  • 举报
回复
你自己已经说到了,双引号内的js代码是在全局调用的,只能访问到全局变量,局部变量可以用字符串形式传递
(function bb(){
var aa = 2;
Function("alert("+aa+")")(); //
})();




Go 旅城通票 2012-08-15
  • 打赏
  • 举报
回复
Function("alert(aa)")(); // 报错,显示aa未定义
//==>等价于
(function(){alert(winndow.aa)})(),你没加前缀window,作用域是window全局的,所以出错


Function("var bb = 3;")();
//====>

(function(){var bb = 3;)})()//声明一个匿名函数,定义匿名函数的局部变量bb,你去掉var就是全局的了
juxuyo 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
http://zhidao.baidu.com/question/330396255.html
[/Quote]、

一个构造函数,一个关键字,我问的是这两种使用方法,为什么结果完全不一样?
  • 打赏
  • 举报
回复
http://www.2cto.com/kf/201106/92682.html
  • 打赏
  • 举报
回复
http://zhidao.baidu.com/question/330396255.html
juxuyo 2012-08-15
  • 打赏
  • 举报
回复
//难道  Function  优先执行???????

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧