结果在后面的注释中。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
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
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 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/
你好!感谢您的回复!
我有一点不是很明白,您的说的第一行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 了啊。。
区别是一个有var,一个没有。
var变量是提前解析的,无var的变量赋值时解析(首先搜索作用域链,如无此变量,在全局环境添加)
看是什么效果?
果然,我在后面又加了一句
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 效果一样?颠覆我的思想了。。
var变量是提前解析的,无var的变量赋值时解析(首先搜索作用域链,如无此变量,在全局环境添加)========您的意思是function setA(){
a = 2;
var a;
}
即使这样写也是先执行 var a; 后执行 a=2?
var a = 2;
这两是不同的 var a; 相当于声明,在它的区域范围内是首先分析的。
var a=2; 这个是到代码真实执行了,是按照顺序进的。