var a = 10;
function test () {
a = 100;
console.log(a); //100
console.log(this.a); //10
var a;
console.log(a); //为什么这个最后也是输出10了,讲道理的话应该是undefined,就算被覆盖难道不是被100 覆盖吗
}
test();
var a = 10;
function test () {
a = 100;
console.log(a); //100
console.log(this.a); //10
var a;
console.log(a); //为什么这个最后也是输出10了,讲道理的话应该是undefined,就算被覆盖难道不是被100 覆盖吗
}
test();
变量提升所致,相当于如下代码
function test() {
var a = 100;
console.log(a);
console.log(this.a);
console.log(a);
}
楼主的代码粘的有点乱,我第一次看错了...
先上百科:
过程体(包括方法function,对象Object o ={})外的所有变量不管你有没有加var保留字,他都是全局变量
而在过程体内(包括方法function(){},对象Object o={})内的对象加var保留字则为局部变量,而不加var保留字即为全局变量
第一行的var a = 10; 是全局变量
调用test函数的上下文环境即Window
console.log(this); //Window
在函数内部,由于变量提升,var a;这行相当于在最前面,所以函数内部的a是局部变量.
就是说楼主的代码中,有一个全局变量a和一个局部变量a;
全局变量a = 10;
局部变量a = 100;
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
5 回答814 阅读
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答848 阅读✓ 已解决
var a = 10;
楼主提问题之前不运行一下函数吗?最后一个明明打印出100的,这样容易给人误解的,自己都没研究过?