作用域详解

作用域的定义

就是一个变量可以生效的范围

作用域的分类

1、全局作用域
变量在函数外定义,就是全局作用域
全局变量有 全局作用域: 网页中所有脚本和函数均可使用。
比如:一个html页面就是一个全局作用域
打开页面的时候,作用域就生成了,知道页面关闭为止
如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
2、局部作用域
变量在函数外内,就是全局作用域
每一个函数就是一个私有作用域
3、作用域的上下级关系
全局作用域最大, 所有的私有作用域都是在全局作用域下面的
函数生成的私有作用域, 函数写在那个作用域里面就是哪个作用域的子级

作用域的三大规则
  1. 变量定义规则
    有 var 关键字
    或者 function 函数名() {}
    定义变量:var num
    定义变量:function fn() {}

    当你在定义一个变量的时候
    你把这个变量定义在哪个作用域里面
    就只有这个作用域及其后代作用域可以使用
    当前作用域的所有祖先级作用域不能使用

    var a = 100			// 全局作用域里面的变量 a
    function fn() {	
    	var b = 200 	// fn 私有作用域里面的变量 b
    function fun() {
        var c = 300 	// fun 私有作用域里面的变量 c
       }
    }
  1. 变量的使用规则
    就是当你需要拿到一个变量的值去使用的时候
    console.log(num) // 我要使用 num 的值去打印出来
    1 + num // 我要使用 num 的值去和 1 进行运算
    var abc = num // 我要使用 num 的值赋值给 abc

    当你需要使用一个变量的时候
    首先, 在自己作用域内部查找, 如果有, 就直接使用, 停止查找
    如果没有, 就去上一级作用域查找, 有就使用, 停止查找
    如果还没有, 就再去上一级作用域查找, 有就使用, 停止查找
    直到全局作用域都没有, 那么就报错 “变量 is not defined”

     var a = 100
     function fn() {
	     var a = 'fn 里面的 a 变量'
	     var b = 200
	     var d = 'fn 里面的 d 变量'
	     function fun() {
	         var a = 'fun 里面的 a 变量'
	         var b = 'fun 里面的 b 变量'
	         var c = 300
	         console.log(d) // 得到的是 fn 作用域里面的 d 变量的值
	     					// fun 这个函数里没有 d 这个变量,往上找
	     }
	     fun()
     }
     fn()
  1. 变量的赋值规则
    给一个变量进行赋值的操作
    num = 100 // 要把 100 这个值赋给 num 这个变量
    num = function () {} // 要把 函数 这个值赋给 num 这个变量

    当你需要给一个变量赋值的时候
    先在自己作用域内部查找, 如果有, 就给自己作用域内部的变量赋值
    如果没有, 就向上一级查找, 如果有就给父级的变量赋值
    如果还没有, 就继续向上查找
    直到全局作用域都没有, 那么就把这个变量定义为全局变量, 再进行赋值

    var a = 100 		// 全局 a 变量
    function fn() {
      var a = 200 		// fn 私有变量 a
      a = '后来赋值操作'	// 这里 a 没有 定义,为全局变量,把最上面的 a 的值覆盖了
      console.log(a)	// 打印结果为 '后来赋值操作'
    }
    fn() 				// 因为 fn 函数的执行, 给全局变量 a 从新进行了赋值操作
    console.log(a)		// 这里的打印结果为 '后来赋值操作',因为 a 被后来被从新赋值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值