本帖最后由 p270228163 于 2013-03-03 21:35:31 编辑

解决方案 »

  1.   

    主要是作用域问题
    var a = 10;
      function test() {
        a = 100;
        alert(a+'.1');
        alert(this.a+'.2');
        var a;
        alert(a+'.3');
      }
     test();
    这儿只需记住同一片作用域里面a变量是同一个变量,一旦函数内定义了局部变量a,函数内所有a就都是这个局部变量a,函数内this为window,所以this.a会访问到全局变量a,故依次为100.1,10.2,100.3 var a = 'aa';
    function test(){
    alert(a+'.4');
    var a = 'dd';
    alert(a+'.5');
    }
    test(); 与上原理同,定义a后函数内的a都是同一个
    第一处还未赋值,为undefined,该值与字符串相加没试过,应该是弹出undefined.4,第二处不用说dd.5
      

  2.   

    你错了,这个是在一个js文件里面的,alert的次数是4粗而不是5次,我看的一个csdn的帖子看到真的着个测试,结果我放到一块,然后结果,不是2个分开的结果,而是其中一个,
    过两天我把这个总结一下,昨天看了(别的大婶的解释).还没有验证是不是正确,
      

  3.   

    你可以试试,会alert 4次而不是 5次
      

  4.   

    只会调用最后的那个test()当然是两次*2次的alert了
      

  5.   

    那个我知道函数会覆盖,
    1.函数以最后一个为准,(如果参数不一样呢,函数可以重载吗)
    2.声明的一个变量都会分配内存,知道赋值了才会alert出结果,否则都是undefined
    3.作用域的,函数内函数外有同名变量,函数内未赋值前都是undefined,要想访问函数外变量得用this 如 this.a
     不知道有没有错误,有错误请大神指出来!
    ^_^
      

  6.   

    1、js没有重载,变量名只是对函数的引用,所以当定义一个函数a时,相当于把内存中的函数赋值给变量a;如果再次定义一个函数a,则相当于给a重新赋值。也就是说,a只可能指向一个函数,不会重载的。
    2、这个是变量作用域的问题,变量的声明会在编译的时候就确定下来,如果在赋值之前就使用变量,因为在函数作用域就能找到一个未赋值的变量,就不会到更上层的作用域去查找变量了。不过由于该变量没有赋值,所以alert出来的是undefined。
    3、不要搞错了this的含义。this代表的是调用这个函数的对象。如果没有别的对象调用,比如有函数fun,类似fun()的调用,因为没有调用对象,默认是window,所以此时this就是window;但如果这样调用,比如a.fun()此时this就等于a了。同时有些调用可以改变this的指向,比如fun.apply(c,args),此时的this就是第一个参数c。
      

  7.   

    学习了.不是说定义边玲如果不用var则这个变量就是window的变量的么 
    函数内部的a如果没定义应该去查找环境(window)的变量啊
      

  8.   

    不错,很给力,强化了一下在function与中变量的声明与变量的赋值