javascript - 这段js代码打印出来的结果为什么是这样的?
伊谢尔伦
伊谢尔伦 2017-04-10 16:28:55
0
14
1196
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伐。

모든 응답(14)
PHPzhong

变量的作用域不一样,前一个是全局变量,后一个是局部变量

PHPzhong

很明显 最下面那个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
  }
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿