var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
console.log(a); //1
为什么不是10呢, 在function b中定义了一个function a, 怎么就能把a=10给冲掉呢, 这段代码的解析和执行顺序是怎么样的啊
原文在这:
http://www.adequatelygood.com...
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
function b() {
}
//由于函数声明提升,是这样的
function b(){
}
当这段代码执行在实际运行过程中可以分为2个阶段,第一个阶段是代码的编译阶段,在这个阶段引擎会找到所有的声明,并关联作用域,这也是
hoisting发生的阶段,第二阶段是代码的执行阶段。具体到上面的代码就是:在一个函数内,通过函数表达式的方式声明了函数
a:function a() {},编译阶段hoisting。那么这个函数执行的时候就成这样了:函数
b执行的时候,在它的作用域中有局部变量a,因此并不会影响到外部的全局变量a,所以最后console.log(a)的时候仍然是输出的全局变量a的值.