一、作用域
1、全局变量的作用
尽量少使用全局变量
①、共同操作同一个变量
<script>
var num=0;
function add(){
num++
console.log(num)
}
function remove(){
num--
console.log(num)
}
add()
add()
remove()
remove()
</script>

二、作用域链
实际上就是函数的[[Scopes]]属性中保存的属性,每个属性对应的就是作用域链连接的作用域,[[Scopes]]有先后顺序,查找变量的时候会在[[Scopes]]中顺序查找;

三、作用域注意事项
1、不声明直接赋值的变量会成为全局变量
js是弱类型语言,当赋值的变量不存在时,会在最外层的全局仓库中创建该变量;
<script>
//相当于会在这里的全局仓库中创建一个全局变量num
//var num = 10
function a(){
num = 10;
}
a();
console.log(num) //10
</script>
![]()
但是不声明直接赋值的变量被多层函数包裹的时候不能在全局输出,会出现报错
<script>
//相当于会在这里的全局仓库中创建一个全局变量num
//var num = 10
function a(){
function b(){
function c(){
num = 10;
}
}
}
a();
console.log(num)
</script>

2、全局变量或者函数会自动成为window的属性
console.log = window.console.log
alert = window.alert
<script>
var num = 10;
window.console.log(window.num)
</script>
3、函数的形参会默认定义为函数的局部变量
<script>
function func(a,b){} //在这里a,b就是函数的局部变量
</script>
本文介绍了JavaScript中的作用域概念,强调了全局变量的使用注意事项,详细讲解了作用域链的原理,并列举了作用域的相关注意点,如未声明变量会成为全局变量、全局变量和函数自动成为window对象的属性,以及函数形参的局部作用域特性。

被折叠的 条评论
为什么被折叠?



