博客
关于我
作用域、作用域链到底是怎么回事?
阅读量: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 让所有IP访问数据库
查看>>
mysql 记录的增删改查
查看>>
MySQL 设置数据库的隔离级别
查看>>
MySQL 证明为什么用limit时,offset很大会影响性能
查看>>
Mysql 语句操作索引SQL语句
查看>>
MySQL 误操作后数据恢复(update,delete忘加where条件)
查看>>
MySQL 调优/优化的 101 个建议!
查看>>
mysql 转义字符用法_MySql 转义字符的使用说明
查看>>
mysql 输入密码秒退
查看>>
mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
查看>>
mysql 里对root及普通用户赋权及更改密码的一些命令
查看>>
Mysql 重置自增列的开始序号
查看>>
MySQL 错误
查看>>
MySQL 面试,必须掌握的 8 大核心点
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>
MySql-2019-4-21-复习
查看>>
mysql-connector-java各种版本下载地址
查看>>
mysql-group_concat
查看>>
MySQL-redo日志
查看>>