JS当中已有一个全局变量 aa后在一个jsp中加了一个js方法
function aaaaa(){
  alert(aa);   var aa = '123';}执行的时候,弹出 undefined错误,把 var aa = '123';去掉就没事了。请高手解释一下。

解决方案 »

  1.   

    有事
    function aaaaa(){
      alert(aa);
      var aa = '123';
      alert(1234);//
    }
    因错误阻断,undefined在控制台还能看到
    是否定义与定义是否正确是两个不同概念
      

  2.   

    作用域问题
    你有
    {
      alert(aa);
      var aa = '123';
    }
    这是定义在后,使用在前
    违背了:先定义后使用的原则
      

  3.   

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

  4.   

    相当于: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
      

  5.   

    补充:
    js并不是纯解释执行的,他有一个预编译过程(当然是比较粗浅的)
    在此过程中,他发现在花括号({})有 var 变量声明,所以他就假定在此花括号中,您的语法是正确的,而屏蔽掉外部变量 aa
    没想到,你在运行时没按“先定义,后使用”的原则办事。
    于是就无所适从了,只有报个错,提醒你一下