JS变量作用域

本文详细探讨了JavaScript中的变量作用域,包括全局作用域和函数作用域。全局作用域的变量在函数及自定义对象外声明,是window对象的属性,可以在任何位置访问。函数作用域的变量只在自身函数内可见,而用let或const声明的变量具有代码块作用域。建议遵循'就近原则',优先使用局部作用域的变量。
摘要由CSDN通过智能技术生成

JS变量作用域

先明确一点:讨论作用域,讨论的是非对象成员的变量

一.全局作用域

1.创建具有全局作用域的变量

在函数以及自定义对象之外声明的变量,具有全局作用域

2.具有全局作用域的变量的特性

1.浏览器会创建一个window对象,window的所有属性,都具有全局作用域 
2.反过来,具有全局作用域的变量,都是window的属性

    <script type="text/javascript">

        var a = 3;

        {
            b = 2;
        }

        console.log(window.hasOwnProperty("a"));
        console.log(window.hasOwnProperty("b"));
        console.log(window.hasOwnProperty("c"));

    </script>

3.具有全局作用域的变量,任何位置都可以访问

        var a = 3;

        {
            b = 2;
        }

        console.log(b);

通过上面的两个例子可以看到,JS中,没有代码块作用域。

二.函数作用域

1. 作用于整个函数

函数中使用var关键字声明的变量,在自己的函数对象可见

        function func(){
            var b = 2;   
        }

        console.log(b);

 

2. 代码块作用域

代码块中,使用let或const声明的变量,具有代码块作用域

function func(){
    {
        var a = 1;//作用域是整个func函数
        let b = 2;//代码块作用域
        const c = 3;//代码块作用域
    }

    console.log(a);
    console.log(b);
    console.log(c);
}

func();

由于JS是解释型的语言,访问变量b时出错,就终止了执行,所以没有变量c的报错。

顺便提一句,const修饰的变量只能在初始化时被赋值一次。

三.使用哪一个?

情况一:

        var b = 1;
        function func(){
            var b = 2;   
            console.log(b);
        }


优先使用“自己的”

如果一定要访问,可以这样

        var b = 1;
        function func(){
            var b = 2;   
            console.log(window.b);
        }

因为具有全局作用域的变量,所以可以使用对象来限定

情况二:

        var a = 1;
        function f1(){
            var a = 2;
            function f2(){
                console.log(a);
            }
            f2();
        }

        f1();

 优先使用“离自己近的”

总结一下:简单记忆——就近原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值