结果在后面的注释中。var number = 2;function getNumber() {
return this.number;
}function getNumber2() {
number = 4;
console.log("a " + number); // 4 var number;
console.log("b " + number); // 4 number = number * 2;
console.log("c " + number); //8 getNumber(); function getNumber() {
console.log("d " + this.number); // 2
return this.number;
}
}console.log("e " + getNumber2()); // undefined
console.log("f " + getNumber()); // 2

解决方案 »

  1.   

    又增加了一些。。太奇怪了,这是为什么呢。。var number = 2;
    var number2 = 5;
    function getNumber() {
    return this.number;
    }function getNumber2() {
    number = 4;
    console.log("a " + number); // 4 var number, number2;
    console.log("b " + number+' number2 '+number2); // b 4 number2 undefined 

    number = number * 2;
    console.log("c " + number); //8 getNumber(); function getNumber() {
    console.log("d " + this.number); // 2
    return this.number;
    }
    }console.log("e " + getNumber2()); // undefined
    console.log("f " + getNumber()); // 2
      

  2.   

    1 var的作用。如果在函数中使用var,则变量是局部变量,这样同名的全部变量会失效的。
    2 number定义,而number2没有定义。是因为js是先解析的。var number,number2是声明了,而没有定义。而函数第一行number=4,则是对var number的定义。这里应该是对局部变量复制为4,并没有修改全局变量number。
    3 函数的调用要理解this的使用。this是和对象有关的。xxx.getNumber(),那么this就是指xxx对象。如果简单函数调用,this就是windows对象,this.number就是全局变量。this的概念请参考
    http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/
      

  3.   


    你好!感谢您的回复!
    我有一点不是很明白,您的说的第一行number=4,则是对var number的定义。这里应该是对局部变量复制为4,并没有修改全局变量number。我觉得应该是把全局变量改成4了吧?
    如下例子var a=2;
    function setA(){
    console.log(a); // 2
    a = 4;
    console.log(a); // 4
    }
    setA();
    console.log(a); // 4这里的a应该跟上面的number一样吧,这里的全局变量中的a被改成4 了啊。。
      

  4.   


    区别是一个有var,一个没有。
    var变量是提前解析的,无var的变量赋值时解析(首先搜索作用域链,如无此变量,在全局环境添加)
      

  5.   

    a=4  修改为var a=4;
    看是什么效果?
      

  6.   


    果然,我在后面又加了一句
    var a=2;
    function setA(){
    console.log(a); // undefined
    a = 4;
    var a;
    console.log(a); // 4
    }
    setA();
    console.log(a); // 2结果果然变了,
    函数中也可以这样定义变量
    先写 a=4,然后 后面var a; 这里先后顺序居然没有区别?。。
    这样跟 直接 var a =4 效果一样?颠覆我的思想了。。
      

  7.   

    详细请参考《Javascript 高级程序设计》 4.2章 执行环境和作用域
      

  8.   

    区别是一个有var,一个没有。
    var变量是提前解析的,无var的变量赋值时解析(首先搜索作用域链,如无此变量,在全局环境添加)========您的意思是function setA(){
    a = 2;
    var a;
    }
    即使这样写也是先执行 var a; 后执行 a=2?
      

  9.   

    大概就是11楼你说的意思。var a;
    var a = 2;
    这两是不同的 var a;  相当于声明,在它的区域范围内是首先分析的。
    var a=2;  这个是到代码真实执行了,是按照顺序进的。
      

  10.   

    多理解一下变量作用域和this对象