js undefined 局部变量,全局变量冲突?

walkman154 2012-09-13 06:16:39
JS当中已有一个全局变量 aa

后在一个jsp中加了一个js方法
function aaaaa(){
alert(aa);

var aa = '123';

}

执行的时候,弹出 undefined错误,把 var aa = '123';去掉就没事了。

请高手解释一下。
...全文
217 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2012-09-13
  • 打赏
  • 举报
回复
补充:
js并不是纯解释执行的,他有一个预编译过程(当然是比较粗浅的)
在此过程中,他发现在花括号({})有 var 变量声明,所以他就假定在此花括号中,您的语法是正确的,而屏蔽掉外部变量 aa
没想到,你在运行时没按“先定义,后使用”的原则办事。
于是就无所适从了,只有报个错,提醒你一下
泡泡鱼_ 2012-09-13
  • 打赏
  • 举报
回复
相当于:

var aa='234'
function aaaaa(){
var aa;
alert(aa);//因为js预编译,这里的aa其实是后面var中定义的,但赋值操作却没有执行,因此报undefined

aa = '123';

}

看看下面这篇贴子吧,很是被熏陶了一把
http://topic.csdn.net/u/20120830/13/db72bec5-db6c-4c78-83ab-973f20bc2216.html
泡泡鱼_ 2012-09-13
  • 打赏
  • 举报
回复
js预编译问题

var aa='234'
function aaaaa(){
alert(aa);//因为js预编译,这里的aa其实是后面var中定义的,但赋值操作却没有执行,因此报undefined

var aa = '123';

}
xuzuning 2012-09-13
  • 打赏
  • 举报
回复
作用域问题
你有
{
alert(aa);
var aa = '123';
}
这是定义在后,使用在前
违背了:先定义后使用的原则
franzhong 2012-09-13
  • 打赏
  • 举报
回复
有事
function aaaaa(){
alert(aa);
var aa = '123';
alert(1234);//
}
因错误阻断,undefined在控制台还能看到
是否定义与定义是否正确是两个不同概念

87,991

社区成员

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

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