博客
关于我
作用域、作用域链到底是怎么回事?
阅读量: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 优化器 key_mysql – 选择*和查询优化器
查看>>
MySQL 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>