JavaScript中的变量作用域

在es5中变量作用域分为两种:全局变量,局部变量;
局部变量:写在函数体内部,其中函数中所传递的参数也是局部变量(小括号中的),仅在定义的部分能够使用;
全局变量:写在函数体外部的变量,其中在函数中使用但未用var声明的变量也是全局变量,可以在全局中任何部分使用;

下面是关于变量作用域的小案例:

全局变量

(1)直接声明
var a = 10;
console.log(a)  // 10
(2)在{ }中声明

例如在一个if条件语句中定义了一个变量c, 在程序执行过程中,没有执行到这条语句,但是在条件语句外部依旧可以输出这个变量。此时变量c进行的作用域的提升,在条件语句外定义变量,在判断语句中进行赋值。

var b=4;
    if(b>5){
        var c=9;
    }else{
        console.log(b)  // 4
    }
    console.log(c)  // undefined

提升后

var b=4;
    var c;
    if(b>5){
         c=9;
    }else{
        console.log(b)  // 4
    }
    console.log(c)  // undefined
(3)在函数体中使用但并未声明

例如:在函数内部有一个a=10;但是a没有用var声明;此时a为全局变量,相当于调用这个函数的时候在全局外定义变量a,在函数中进行赋值。若函数没有被调用则a不会在全局中被声明。

function demo(){
        a = 10;
    }
    console.log(a);   // 报错
    demo();
    console.log(a); // 10

相当于:

var a;
    function demo(){
        a = 10;
    }
    console.log(a); // undefined
    demo();
    console.log(a); // 10

局部变量

局部变量仅仅在声明的部位能够调用,其他位置不能访问。

(1)在函数体内部声明
function demo(){
        var a = 10;
        console.log(a)  // 10
    }
    console.log(a); // 报错
    demo();
    console.log(a); // 报错
(2)在函数体内部声明中的参数
function demo(a){
         a = 10;
        console.log(a)  // 10
    }
    console.log(a); // 报错
    demo();
    console.log(a); // 报错

总结:

在定义变量的时候,需要考虑作用域的问题,尤其是在函数中,建议多使用局部函数,因为函数只用在调用的时候才被创建,使用完毕就会被销毁,不会一直占用内存,而全局变量不会关心你是否使用,只要定义了就会一直存在,知道关闭浏览器才会被销毁,比较占用内存。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值