Rumah > Soal Jawab > teks badan
var a = 1;
var b = function(){
console.log(a); // function a(){}
a = 10;
console.log(a); //10
return;
function a(){} //声明提升
}
b();
console.log(a); //1 为什么是这个数?
最后打印出来的a值,不应该是10吗?为什么是1呢?
PHPz2017-04-10 16:30:55
很明显 最下面那个console是在Window作用域下,那window下的a是多少呢,是1。函数里面的执行顺序是这样的,function a(){},先声明了方法a,然后重新赋值了a=10,这个a是对方法a的赋值。
伊谢尔伦2017-04-10 16:30:55
作用域啊!你那函数b中由于由于声明提升a最初是函数,然后又变成数字。但它只有在调用b函数时执行一次,然后就从内存中清楚了。一点也没有影响全局的a,所以a值还是1。
PHP中文网2017-04-10 16:30:55
我觉得你可能忽略的一个知识点:函数声明同时也创建了一个和函数名相同的变量。这样一来函数作用域内部的执行顺序如下:
var b = function() {
var a;
function a(){};
console.log(a);//a()
a=10;
console.log(a);//10
}