全局变量和局部变量

变量作用域

JS是函数级作用域编程语言:变量只在其定义时所在的function内部有意义

function fun() {
    var a = 10;  // a是局部变量
    console.log(a);  // 10
}
fun();
console.log(a);  // 报错:Uncaught ReferenceError: a is not defined

全局变量

如果不将变量定义在任何函数的内部,此时这个变量就是全局变量,它在任何函数内都可以被访问和更改;

var b = 10;  // b是全局变量
function fun2() {
    b++;
    console.log(b);  // 11
}
fun2();
console.log(b);  //  11

遮蔽效应

如果函数中也定义了和全局同名的变量,则函数内的变量会将全局的变量“遮蔽”;

// 全局变量
var a = 10;
function fun() {
    // 局部变量,会把全局的变量a遮蔽
    var a = 5;
    a++;
    console.log(a);
}
fun();
console.log(a);

形参也是局部变量

var a = 10;
function fun(a) {
    a++;
    console.log(a);  // 8
}
fun(7);
console.log(a);  // 10

作用域链

函数的嵌套

一个函数内部也可以定义一个函数;和局部变量类似,定义在一个函数内部的函数是局部函数;

function fun() {
    function inner() {
        console.log('你好');
    }
    inner();
}
fun();

作用域链

在函数嵌套中,变量会从内到外逐层寻找它的定义;

 var a = 10;
 var b = 20;
 function fun() {
     var c = 30;
     function inner() {
         var a = 40;
         var d = 50;
         console.log(a, b, c, d);  // 40 20 30 50
     }
     inner();
 }
 fun();

不加var将定义全局变量

在初次给变量赋值时,如果没有加var,则会定义全局变量;

function fun() {
    a=3;
}
fun();
console.log(a);  // 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值