博客
关于我
作用域、作用域链到底是怎么回事?
阅读量:120 次
发布时间:2019-02-27

本文共 879 字,大约阅读时间需要 2 分钟。

作用域

它是指对某一变量和函数具有访问权限的代码空间

在js中只有两种作用域
1.全局作用域:script标签内部的区域就是全局作用域
2.局部作用域:函数大括号内部的区域就是局部作用域
在js中只有函数可以划分作用域,因此每个函数的大括号内部都是一个局部作用域
因此我们称局部作用域为函数作用域

  1. 全局变量 声明在全局的变量
  2. 全局作用域就是全局变量起作用的范围
  3. 局部变量 在函数内部声明的变量
  4. 局部作用域就是局部变量起作用的范围

不同作用域中变量和函数的访问权限

  1. 局部作用域中声明的变量和函数只能在局部作用域中访问
  2. 全局作用域中声明的变量和函数可以在全局任意访问
  3. 两个同级的布局作用域之间不能互相访问对方内部的变量
  4. 全局作用域不能访问局部里面的变量

由以上几条推出

  1. 子级作用域能访问父级作用域的变量和函数
  2. 父级作用域不能访问子级的变量和函数
  3. 同级作用域之间不能互相访问变量和函数

作用域链

会先在当前作用域查找变量,当前没有向上一级查询

1.当前有使用当前的变量。
在这里插入图片描述
首先,函数不调用不执行,所以调用了fun函数,在fun函数中,有一个函数a,调用了函数a,打印了a,调用a会执行a函数,里面var了一个a赋值为10,所以在函数a中打印a出的结果为10,在fun函数中打印a的结果是函数a这个函数体。

2.当前没有向上一级查找变量,一直到全局作用域为止,如果还是没有会报错,xxx is not defined。

var c = 100;//全局作用域中有c        function num(b) {           //上一级函数局部作用域也没有c            var a = 10;            function sum() {                   console.log(a + b + c) //当前函数局部作用域没有c            }            sum()        }        // num(10)  //10+10+100        num(10)  //120

转载地址:http://ppkb.baihongyu.com/

你可能感兴趣的文章
Mysql事务。开启事务、脏读、不可重复读、幻读、隔离级别
查看>>
MySQL事务与锁详解
查看>>
MySQL事务原理以及MVCC详解
查看>>
MySQL事务及其特性与锁机制
查看>>
mysql事务理解
查看>>
MySQL事务详解结合MVCC机制的理解
查看>>
MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
查看>>
MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
查看>>
webpack css文件处理
查看>>
mysql二进制包安装和遇到的问题
查看>>
MySql二进制日志的应用及恢復
查看>>
mysql互换表中两列数据方法
查看>>
mysql五补充部分:SQL逻辑查询语句执行顺序
查看>>
mysql交互式连接&非交互式连接
查看>>
MySQL什么情况下会导致索引失效
查看>>
Mysql什么时候建索引
查看>>
MySql从入门到精通
查看>>
MYSQL从入门到精通(一)
查看>>
MYSQL从入门到精通(二)
查看>>
mysql以下日期函数正确的_mysql 日期函数
查看>>