Javascript变量作用域

Javascript变量作用域

1.let和var的区别

(1)能否用其定义同名变量
通过var定义变量,可以重复定义同名的变量,并且后定义的会覆盖先定义的;如果通过let定义变量, "相同作用域内"不可以重复定义同名的变量。

		var num = 123;
        var num = 321; // 不报错
        console.log(num); 
        let num = 123;
        let num = 321; // 报错

(2)是否能够先使用后定义-与预解析有关
通过var定义的变量, 可以先使用后定义(会预解析);
通过let定义的变量, 不可以先使用再定义(不会预解析-即不会提升对let的预解析)。

 		console.log(num); // 输出undefined
        var num = 123;
        /*
        预解析后:
        var num;
        console.log(num);
        num = 123;
		*/
		console.log(num); // 报错
        let num = 123;
        /*
        预解析后:
        console.log(num);
        let num;
        num = 123;
        */

(3)是否能被{}限制作用域
无论是var还是let定义在{}外面都是全局变量;
将var定义的变量放到一个单独的{}里面, 还是一个全局变量;
将let定义的变量放到一个单独的{}里面, 是一个局部变量。

		{
            var num = 123;
        }
        console.log(num);  //不会报错
         {
            let num = 123;
        }
        console.log(num);  //会报错
2.三种作用域

(1)在JavaScript中{}外面的作用域,:全局作用域
(2)在JavaScript中函数后面{}中的的作用域:“局部作用域”
(3)在ES6中只要{}没有和函数结合在一起:“块级作用域”

		{
            // 块级作用域
        }
        if(false){
            // 块级作用域
        }
        while (false){
            // 块级作用域
        }
        for(;;){
            // 块级作用域
        }
        do{
            // 块级作用域
        }while (false);
        switch () {
            // 块级作用域
        }
        function say() {
            // 局部作用域
        }
3.块级作用域和局部作用域区别

在块级作用域中通过var定义的变量是全局变量;
在局部作用域中通过var定义的变量是局部变量

		if(false){
			// 块级作用域
			var a=123; // 全局变量
		}
		console.log(	a); // 不报错
		function say(){
			// 局部作用域
			var b=234; // 局部变量
		}
console.log(b); // 报错
4.省略var或let直定义接初始化
		if(true){
			// 块级作用域
			a=123;
		}
		function test(){
			// 局部作用域	
			b=234;
		}
		console.log(a); // 不报错
		console.log(b); // 报错
		test();
		console.log(b); // 不报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值