文章目录

  • 前言
  • 一、什么是作用域?
  • 二、作用域有几种?
  • 三、自由变量
  • 四、作用域链
  • 五、变量提升(预解析)

前言

一、什么是作用域?

作用域就是一个变量可以使用的范围。

二、作用域有几种?

作用域一共有三种。
分别是:
1.全局作用域
2.函数作用域
3.块级作用域(Es6新增的方法)

var a=100; //全局
function fn(){  //函数
var b=200;
if(true){   //块级
let c=300;}
}

注意::js中首先有一个最外层的作用域,全局作用域; js中可以通过函数来创建一个独立作用域称为函数作用域,函数可以嵌套,所以作用域也可以嵌套;
es6中新增了块级作用域(大括号,比如:if{},for(){},while(){}…);

如图所示;

es6作用域,只适用于const,let

三、自由变量

自由变量:当前作用域没有定义的变量
注意:
1.一个变量在当前作用域没有定义,但被迫使用了
2.向上级作用域,一层一层依次寻找,直到找到为止
3.如果到全局作用域都没找到,就报错 xx is not defined

四、作用域链

自由变量的向上级作用域一层一层查找,直到找到为止,最高找到全局作用域,就形成了作用域链。

五、变量提升(预解析)

var声明的变量,function声明的函数存在变量提升
let const 不会变量提升

  1. javascript中声明并定义一个变量时,会把声明提前,以下会先打印出undefined,再打印出10
console.log(a)
var a = 10
console.log(a)

相当于

var a
console.log(a);//undefined
a = 10
console.log(a) //10
  1. (自定义函数/命名函数)函数声明也是,以下函数相当于把整个fn提到作用域的最上面,所以调用fn时会正常打印jack
fn('jack');//jack
function fn (name){console.log(name)
}
  1. 不过函数表达式不行,以下是一个函数表达式,JavaScript会把var fn提到作用域最上面,没有吧函数提上去,所以会报错。
fn("jack");//报错
var fn = function(name) {console.log(name);
};

六:函数的预解析高于变量的预解析

作用域和自由变量的介绍相关推荐

  1. js爬山之作用域和自由变量~~狂徒李四

    作用域的种类 全局作用域 js中最外层 的作用域就是全局作用域 函数作用域 js中可以通过函数来创建一个独立作用域称为函数作用域,函数可以嵌套,所以作用域也可以嵌套: 块级作用域(es6新增) es6 ...

  2. JS作用域和自由变量

    作用域: 简单来说作用域就是一个变量可用的范围 作用域有以下三种 1. 全局作用域 在最外层定义的变量或者方法,全局都可以使用,所以是全局作用域. 2. 函数作用域(局部作用域) js中可以通过函数来 ...

  3. 【作用域、自由变量】

    作用域.作用域链.自由变量 一.作用域 二.自由变量 一.作用域 作用域:一个变量可以使用的范围 全局作用域.函数作用域.块级作用域(Es6新增) js中首先有一个最外层的作用域,全局作用域: js中 ...

  4. 关于作用域和自由变量的理解

    一.作用域 1.什么是作用域 作用域就是一段代码可以起作用的范围.决定了变量的适用范围. 全局作用域 最外层的作用域叫做全局作用域. 函数作用域 js中可以通过函数来创建一个独立作用域称为函数作用域, ...

  5. 前端学习(1700):前端系列javascript之作用域和自由变量

  6. 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化

    js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...

  7. 【一天时间|JavaScript基础】作用域和闭包

    一天时间系列文章是博主精心整理的面试热点问题和难点问题,吸收了大量的技术博客与面试文章,总结多年的面试经历,带你快速并高效地审视前端面试知识.直击技术痛点,主动出击,精密打击,这才是面试拿到高薪的秘诀 ...

  8. Python变量作用域的规则以及如何搜索内置作用域

    喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!有不懂的问题可以私聊我哦! **作用域:**是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围 ...

  9. 从零学前端第十四讲:AngularJs进阶-作用域和控制器

    修真院Web工程师零基础全能课 本节课内容 AngularJs进阶-作用域和控制器 主讲人介绍 沁修,葡萄藤技术总监 项目经验丰富,擅长H5移动项目开发. 专注技术选型.底层开发.最佳代码实践规范总结 ...

最新文章

  1. JVM虚拟机参数配置官方文档
  2. Java多线程:乐观锁、悲观锁、自旋锁
  3. 电子邮箱里面的服务器,搭建电子邮件服务器
  4. 【转】三、QT例子-打开一个图片并且显示
  5. Spring Boot整合MyBatis
  6. 如何把女儿培养进麻省理工学院?博士爸爸的40封家书,堪称家庭教育的典范!...
  7. Ubuntu用户及用户组管理命令
  8. angularjs 事件指令
  9. del退役了/del 滚回来了
  10. JS-元素大小深入学习-offset、client、scroll等学习研究笔记
  11. 怎么样装mysql_如何安装MySQL数据库
  12. MES(制造企业生产过程执行管理系统)
  13. 一个游戏是如何被设计和开发出来的
  14. 电脑上有什么类似全能扫描王的软件?这4款扫描app1分钟帮你搞定几十张图片
  15. 岁月温柔-23 妈妈转到省医院第3天 突然icu有床位了
  16. S7-PLCSIM Advance ,解决 Error Code: -30,LicenseNotFound问题解决和期限21天限制的问题,对版本V1.0 V2.0 V3.0有效
  17. java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column 'groupName'
  18. 慧数纵览:日产在华三大工厂将减产30,000辆
  19. DDD之实体与值对象
  20. 代码随想录算法训练营第九天

热门文章

  1. 最简单的Ogre系列之二——画线
  2. 网络分层,图,易懂--对应 应用层、数据传输层、网络层、数据链路层
  3. 实战:k8s中基于角色的权限访问控制-RBAC(成功测试-博客输出)-20211005
  4. axios发送x-www-form-urlencoded格式数据
  5. webstorm 2019 最新注册码 破解方法(持续更新中~
  6. 正则表达式中 前瞻,后顾,负前瞻,负后顾等整理
  7. python是汇编语言吗-汇编语言最新资讯
  8. 视觉SLAM十四讲:第3讲 三维空间刚体运动
  9. 线性代数库 Armadillo 学习笔记
  10. 3d图形消隐c语言,一种3D图形背面消隐算法及其硬件加速实现