本帖最后由 soft53ears 于 2009-09-08 01:54:43 编辑

解决方案 »

  1.   

    且...求一本经典的javaScript数据,有java功底~~~
      

  2.   

    应该是全局变量与局部变量的定义问题。(貌似术语是这样)。
    我改了改你这代码(大概效果应该是一样吧) 这样我比较容易说明些 - -!,望见谅。var aNumber = 100;      //编号1
        
        function tweak() 
        {
         
            var aNumber;       // 编号:2
             
            aNumber = 1;       //编号3
            
        }
    tweak();
    alert(aNumber);     //编号4
    简单的说 在这里编号1的变量就是全局变量,当没有注释掉编号2的代码时,"var" 定义与编号1名称相同的变量时候就是定义的局部变量了,所以在编号3中对其进行赋值,就是赋值给tweak函数的局部变量。而最后alert调用的是编号1的全局变量的值为100。当注释掉编号2的代码时, 由于没有用“var”定义aNumber变量 所以这时候就是tweak函数调用了全局变量并对其进行赋值,所以弹出的值为1。归纳就是 在局部调用与先前相同名称的变量时候 如果使用了关键字"var"重新定义了变量名,那这个就是局部变量,对其赋值也好做什么也好都与先前相同名称的变量无关,相反,则是在调用先前定义了的变量。
      

  3.   

    javascript 沒有块作用域的概念。
    只有全局和局部变量的概念。
    在一个函数中用var声明的变量是局部变量,作用域只在一个函数体中。
    所以你的第一个显示1
    第二个显示100
      

  4.   


    /**定义参数范围问题?    begin**/
        var aNumber = 100;
        
        function tweak()  {
            var newThing = 0;  // 显式声明 newThing 变量。
            aNumber = 1;
            return ;
            if (false)  {
                var aNumber;//无论执行与否,这里的aNumber定义作为局部变量使用,覆盖外部全局变量定义
            }
        }
        tweak();
        alert(aNumber);//获取的是全局变量
    /**定义参数范围?    begin**/
      

  5.   

    全局...局部...但是我的块中是一个false,javaScript不会执行到if中的语句,为什么还会执行那个定义语句
      

  6.   


    同意!
    if(false)
    {
     var number;
    }
    var number已经在if语句之前就执行了。
    不论var 在哪,都会被提升到语句最前,但赋值不会被提升,如:var number=1  只会提升var number
    详情见:http://topic.csdn.net/u/20090913/11/da9afa35-768c-4f12-8157-80295b5fc2c0.html?98991
      

  7.   

    好像在学js的时候,看到一句那样的话:
    js在执行代码的时候,会先开始收集所有的申明但是我想不通的是,js在获取变量的时候是从局部到全局收索的,如果局部与全局有同名应该是用局部的啊最后那个应该返回一个undefined难道我理解错了,我是菜鸟