js作用域与作用域链

本文介绍了JavaScript中的作用域概念,强调了全局变量的使用注意事项,详细讲解了作用域链的原理,并列举了作用域的相关注意点,如未声明变量会成为全局变量、全局变量和函数自动成为window对象的属性,以及函数形参的局部作用域特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、作用域

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值