博客
关于我
作用域、作用域链到底是怎么回事?
阅读量: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进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>
MySQL与Informix数据库中的同义表创建:深入解析与比较
查看>>
mysql与mem_细说 MySQL 之 MEM_ROOT
查看>>
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>
mysql丢失更新问题
查看>>
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>
MySQL中auto_increment有什么作用?(IT枫斗者)
查看>>
MySQL中B+Tree索引原理
查看>>
mysql中cast() 和convert()的用法讲解
查看>>
mysql中datetime与timestamp类型有什么区别
查看>>
MySQL中DQL语言的执行顺序
查看>>
mysql中floor函数的作用是什么?
查看>>