<script>
var a = 0;
if (true) {
a = 1;
function a() { };
a = 5;
console.log(a); // 5
}
console.log(a); // 1
</script>
各位大佬,请教:
代码如上,请问这个代码怎么解释为好呢,
里面的为什么返回的是 5
外边的为什么返回的是 1
<script>
var a = 0;
if (true) {
a = 1;
function a() { };
a = 5;
console.log(a); // 5
}
console.log(a); // 1
</script>
各位大佬,请教:
代码如上,请问这个代码怎么解释为好呢,
里面的为什么返回的是 5
外边的为什么返回的是 1
全局作用域和局部作用域
全局作用域:整个JS执行环境
局部作用域:通过创建一个函数就开辟出了一个局部作用域
全局变量和 局部变量
全局变量:在全局作用域都可以访问的变量
局部变量:只能在当前局部作用域访问的
变量声明提升:
如果变量声明在函数里面,则将变量声明提升到函数的开头
如果变量声明是一个全局变量,则将变量声明提升到全局作用域的开头
变量运行(搜索)机制:
首先看,有没有局部作用域
如果有,查找是不是这个局部作用域定义的变量
如果不是,寻找上一级作用域,直到找到全局作用域
如果全局作用域也找不到这个变量,这个变量就是未定义的 undefined
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
首先弄清三点
遇到这种类型的问题,画图是最好的解决办法

断点调试看一下
此时全局的a是0
当function a(){}执行完成后,此时可以看到全局的a已经变成了1