js 作用域的相关知识了解

作用域详解

1.了解作用域
1.1名字解释
	作用: 生效, 可以使用
    	域: 范围
	        一个东西可以生效的范围
	        什么东西 ?----> 变量(变量名, 函数名)
	        其实就是一个变量可以生效的范围
1.2作用域分类
1.全局作用域
	一个 html 页面就是一个全局作用域
      	打开页面的时候, 作用域就生成了, 直到关闭页面为止		        
2.局部作用域(私有作用域)
	 **只有函数生成私有作用域**
      	 每一个函数就是一个私有作用域
      	 
		作用域的上下级关系
    		全局作用域最大, 所有的私有作用域都是再全局作用域下面的
    		函数生成的私有作用域, 函数写在那个作用域里面
      		就是哪个作用域的子级
<script>
//这就是全局作用域
	function fn(){
	//这个位置就是 全局作用域的一个叫做fn 的子级作用域
		function fn(){
			//这个位置就是 全局下的fn私有作用域下的 一个叫fn的私有作用域
		}
}


</script>
2.作用域的三大规则
2.1规则一
1. 定义
      有 var 关键字
      或者 function 函数名() {}
      var num           // 定义变量
      function fn() {}  // 定义变量
2.使用
       就是当你需要拿到一个变量的值去使用的时候
       console.log(num) // 我要使用 num 的值去打印出来
       1 + num          // 我要使用 num 的值去和 1 进行运算
       var abc = num    // 我要使用 num 的值赋值给 abc
3.赋值
	给一个变量进行赋值的操作
        num = 100             // 要把 100 这个值赋给 num 这个变量
        num = function () {}  // 要把 函数 这个值赋给 num 这个变量

**规则内容**
	当你在定义一个变量的时候
   		 你把这个变量定义在哪个作用域里面
	就只有这个作用域及其后代作用域可以使用
   		 当前作用域的所有祖先级作用域不能使用
2.2 规则二
    当你需要使用一个变量的时候
    首先, 在自己作用域内部查找, 如果有, 就直接使用, 停止查找
    如果没有, 就去上一级作用域查找, 有就使用, 停止查找
    如果还没有, 就再去上一级作用域查找, 有就使用, 停止查找
    直到全局作用域都没有, 那么就报错 "变量 is not defined"
2.3规则三
    当你需要给一个变量赋值的时候
    先在自己作用域内部查找, 如果有, 就给自己作用域内部的变量赋值
    如果没有, 就向上一级查找, 如果有就给父级的变量赋值
    如果还没有, 就继续向上查找
    直到全局作用域都没有, **那么就把这个变量定义为全局变量, 再进行赋值
3.小案例
<script>
 var a = b = 10 // 这里代码执行完, 全局两个变量, 一个 a 一个 b
 console.log(a)
 console.log(b)
  /*
      代码解析
        var a = b = 10
      实际上是三个部分
        1. var a
        2. a = b
        3. b = 10
      等于号(赋值) 的规则是从右往左

	1. 预解析
        var a
        2. 代码执行的时候
        b = 10 // 标准的变量赋值操作, 根据变量赋值规则, 会把 b 定义成全局变量再赋值
        a = b
        console.log(a)
        console.log(b)
        */
</script>
<script>
	var a = b
 	 b = 20
    	 a = 10
    	console.log(a)
    	console.log(b)

 /*
      代码执行过程
	1. 预解析
        var a
        在浏览器里面声明了一个 a 变量可以使用
        2. 代码执行
        b = 20 // 对于变量 b 来说是变量的赋值
        a = b // 对于变量 b 来说, 是变量的使用, 报错了, 后面就没有代码了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值