JavaScript作用域的初步认识

作用域

先说一下什么是作用域,作用域就是代码作用生效的区域,作用域分为两种,全局作用域和局部作用域。
全局作用域:在整个区域内,都有效。不属于任何一个函数的区域,叫全局作用域
局部作用域:初步认识中只要是在函数中的,就是一个局部的区域,叫局部作用域
全局变量:指在全局作用域中的变量,全局变量在当前代码内的任何区域都可以拿到。全局变量随着程序的执行一直存在。
局部变量:指在局部作用域中的变量,局部变量只能在当前所在的局部作用域中使用。它在局部作用域的开始时被创建,结束时被删除。可以说的上是朝生暮死。
变量的访问规则
父作用域不能拿子作用域中的变量

function fn(){
    var a = 10;//声明一个变量并赋值
	console.log(a);//运行结果为10
    }
fn();//运行函数
console.log(a);//运行结果为报错,因为在父作用域中并没有变量a的存在

子作用域却可以使用父作用域中的变量

var a = 10;//声明一个变量并赋值
console.log(a);//运行结果为10

function fn(){
        console.log(a);//运行结果也为10,因为子作用域可以使用父作用域中的变量
    }
fn();//运行函数

拓展

   function box(){
        var a = 10;//声明并赋值
        var b = 10;//声明并赋值
        var c;//声明但不赋值

        function fn(){
            var a = 20;	//再次声明再次赋值
            b = 20;  	//不声明只再次赋值
            var c = 20; //再次声明并赋值
            console.log(a);     // 运行结果为20,再次声明赋值会影响局部变量的值,但不会影响父作用域中变量的值。
            console.log(b); 	// 运行结果为20,不声明只赋值会同时改变局部作用域和全局作用域中变量的值。
            console.log(c); 	//运行结果为20,再次声明赋值会影响局部变量的值,但不会影响父作用域中变量的值。
        }
        fn();
        console.log(a);     // 运行结果为10,父作用域中并不能调用子作用域的值,所以还为10.
        console.log(b); 	// 运行结果为20,同上。
        console.log(c);		//运行结果为undefined,同上。
    }
    box();//运行函数

综上所述,在局部作用域中声明赋值并不影响父作用域中原变量的值,但是不声明只赋值的话会影响到父作用域中变量的值。

ps:1.函数等同于变量,也存在全局和局部,所以这次我们拿函数来举例子。
2.作用域这个知识点可以用来优化代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值