alert(a);这里a前面没有定义,为何弹出的结果不是undeifined,而是不会弹出任何内容

解决方案 »

  1.   

    你要是之前相关代码中没有定义过a变量 直接alert(a) 是不会弹出窗口的 代码运行到此会报错了 浏览器不会继续再往下解释undefined是一个没有初始化的变量值 所以变量必须先定义 再使用 这是一条亘古不变的准则~~~~
      

  2.   

    你用firebug调试下就知道了a是未定义的,你要是想测试全局变量的话alert(a=1),要是想让他是全局变量你必须先使用他。
      

  3.   

    因为window.name是空字符串,window.age是undefined,所以你alert(age)会报错,alert(name)会出对话框你需要弄明白三个概念:
    1:什么是undefined?javascript的undefined其实有两个概念,一种就是报错的时候说某个变量undefined,这个时候它是形容词,说某个变量没定义,还有一种就是javascript的一个顶级对象,他就是一个object,跟字符串,数字一样,这个时候它是名词2:alert什么时候会报错呢?并不是你传递一个参数等于undefined(名词)它就报错,而是你传给它一个undefined(形容词)参数它才报错,比如下面两种情况都不会报错:
    alert(undefined);
    var a = undefined;alert(a);
    在这两句中其实undefined都是通过一个声明过的变量作为一个代表传递个alert的,第一句是隐藏变量,你不知道它的名字,是机器替你创建的,第二句就是a变量,alert首先找到变量,然后变量指向undefined对象,不会打乱javascript运行机制,所以把可以把undefined打印出来
    但是如果你从来没声明过一个变量,比如直接写个alert(age);而age这个变量从来没出现过,它也不是当前运行域中的默认变量,alert处理age的时候就看不懂它,更不会通过它找到undefined对象3:javascript的变量都是在自己的scope内才有效,最外层的scope就是window,你平时看到的全局变量其实全都是寄存在window对象下面,alert(name)其实调用的是alert(window.name),它不会报错是因为window有name成员,只不过它是个空字符串而已,而age不同,window.age根本不存在,所以就会导致运行期错误