一段看似简单的js代码的运行结果,很奇怪,哪位大师能给解释下?。。
结果在后面的注释中。
JScript code
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的作用。如果在函数中使用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/
------解决方案--------------------
------解决方案--------------------a=4 修改为var a=4;
看是什么效果?
------解决方案--------------------详细请参考《Javascript 高级程序设计》 4.2章 执行环境和作用域