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呢?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
变量的作用域不一样,前一个是全局变量,后一个是局部变量
很明显 最下面那个console是在Window作用域下,那window下的a是多少呢,是1。函数里面的执行顺序是这样的,function a(){},先声明了方法a,然后重新赋值了a=10,这个a是对方法a的赋值。
作用域啊!你那函数b中由于由于声明提升a最初是函数,然后又变成数字。但它只有在调用b函数时执行一次,然后就从内存中清楚了。一点也没有影响全局的a,所以a值还是1。
我觉得你可能忽略的一个知识点:函数声明同时也创建了一个和函数名相同的变量。这样一来函数作用域内部的执行顺序如下:
var b = function() { var a; function a(){}; console.log(a);//a() a=10; console.log(a);//10 }
变量的作用域不一样,前一个是全局变量,后一个是局部变量
很明显 最下面那个console是在Window作用域下,那window下的a是多少呢,是1。函数里面的执行顺序是这样的,function a(){},先声明了方法a,然后重新赋值了a=10,这个a是对方法a的赋值。
作用域啊!你那函数b中由于由于声明提升a最初是函数,然后又变成数字。但它只有在调用b函数时执行一次,然后就从内存中清楚了。一点也没有影响全局的a,所以a值还是1。
我觉得你可能忽略的一个知识点:函数声明同时也创建了一个和函数名相同的变量。这样一来函数作用域内部的执行顺序如下: