本帖最后由 mesong_66 于 2011-05-02 10:36:00 编辑

解决方案 »

  1.   

    科普下基础ABC ——
    1、“var x = 1”和“x = 1”的方式申明的都是全局变量。
    2、前者标记显式申明,后者直接隐式申明,它们都由JS引擎的内建方式保存,并建立指向内部存储之引用,且存取性能是一样的。
    3、两者的区别主要表现在安全性能方面:一旦声明,前者可修改赋值但不可人为消失,后者可修改赋值并可以随时删除。示例代码“var x = 1;alert(delete x)”结果为 “false”,而示例代码“x = 1;alert(delete x)”结果为 “true”。
      

  2.   

    “window.a”的创建和索引通过了DOM对象,这在IE中是存在问题的,建议不采用该索引方式。请LZ具体参见该文章
      

  3.   

    var a = "a";
    b = "b";
    function test()
    {
    console.log(a+"~~"+b+"</br>"); //js预解析,会先做变量的初始化
    console.log(window.a+"~~"+window.b+"</br>");
    var a ="A";//这里的a是局部变量啊
    b = "B";//b是全局变量,这里是改变的全局变量
    console.log(a+"~~"+b+"</br>");
    console.log(window.a+"~~"+window.b+"</br>");
    }
    test();
    console.log(a+"~~"+b+"</br>");//外面就都是全局变量啊
    console.log(window.a+"~~"+window.b+"</br>");
      

  4.   

    如果是这样写呢?// 注意外面没有定义全局变量
    function ()
    {
        myvar = 1;
        alert(myvar);
        var myvar = 2;
    }
    alert(myvar);两次alert分别是"1"和Error, myvar没有定义。
    也就是说,函数体内一旦用var声明变量,在整个体内都是有效的,可以赋值(虽然看起来像声明一个全局变量),可以使用。注意假设去掉var这一句,那么myvar就是一个全局变量,而最后一个alert也是有效的。
      

  5.   

    使用var 声明的变量,会被添加到最近的作用域链中,如果是在函数中声明,那么就会被添加到函数的作用域环境中
    不使用var 声明,那么就会被默认添加 到window全局环境中
      

  6.   

    1.
    javascript的变量作用域不是{}而是 function(){} 也就是for循环体、while循环体等里面声明的变量在整个function内都是可见的。
    2.
    var 是声明变量。
    在浏览器里面,window对象的属性就是全局变量。
    在function内部,var的变量是局部变量,没有var的变量,被默认当做全局变量。