js变量的作用域

js变量的作用域

根据js中变量的作用域不同分为了两种不同的变量;
1)全局变量
         1.在函数外声明的变量
         2.声明变量是没有使用var
2)局部变量
         在函数内声明的变量(包含参数位置)
3)在ES5中,没有块级作用域

实例


        var a=10;//全局变量
        function show(){
            if(a==10){
                var b1="hello";
            }else{
                var a=20;
            }
            console.log(a);
        }
        show();
        console.log(a);
        

比如上面的例子其中第一个a的结果为20,因为函数外面定义了a=10,但是函数里面由于变量提升把var a;给提升到if语句前面,相当于又重新定义了一边a;但a=20;并没有提升,所以a为赋值的一个变量,所以if语句中的a==10不成立,运行else里面的内容,此时只有a=20在这里所以输出的结果就是20;
第二个a输出的结果为10,因为函数里面定义的a是局部变量,在函数调用完毕之后相当于把整个函数的内存销毁,所以这个a变量的输出结果为最前面在函数外面定义的全局变量a且a的值为10;所以a的输出结果为10;
在ES5中没有块级作用域


        var a=10;//全局变量
           if(a==10){
                var b="hello";
            }else{
                var a=20;
            }
        console.log(a);
        console.log(b);

在上面这个例子中输出a的结果为10;b的结果为hello;因为ES5中没有块级作用域,所以两个a和b都是全局变量因为变量提升只提升定义变量并不会提升赋值,所以开始a==10;所以if条件成立执行b=‘hello’语句;a=20;语句并没有执行,所以a的值还为10,所以a结果为10;b结果为hello;

    if(a==10){
                var b1="hello";
            }else{
                var a1=20;
            }
        console.log(a1);
        console.log(b1);

这个例子中的a1结果就是20了,b1为undefined;因为变量提升,所以a1,b1有定义并没有报错
但变量提升没有提升赋值,所以a==10不成立,运行else中的a=20;语句,b1因为只定义没有赋值,所以b1结果为undefined;

你可能感兴趣的:(js变量的作用域)