<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
6 回答2.9k 阅读✓ 已解决
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
首先弄清三点
遇到这种类型的问题,画图是最好的解决办法
断点调试看一下
此时全局的a是0
当function a(){}执行完成后,此时可以看到全局的a已经变成了1