JavaScript作用域链详解

  • 一、JavaScript作用域
    • JavaScript作用域是什么?
    • 作用域范围
  • 二、JavaScript作用域链
    • 作用域与执行上下文
  • 总结

一、JavaScript作用域

JavaScript作用域是什么?

作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。

作用域范围

块语句(大括号“{}”中间的语句),如 if 和 switch 条件语句或 for 和 while 循环语句,不像函数,它们不会创建一个新的作用域,var是函数作用域,let是块级作用域
块级作用域

// let 块级作用域,只能在{}中存在,出了块级作用域就未定义
let a = 1
if(a = 1){let b = 2
}
b // Uncaught ReferenceError: b is not defined

函数作用域

// var是函数作用域,即使变量定义到块级作用域里,在块级作用域外还是可以访问
let a = 1
if(a = 1){var b = 2
}
b // 2// 变量放到函数中,在函数外访问不到,报错未定义
let g = function(){var h = 4
}
h // Uncaught ReferenceError: h is not defined

全局作用域

// window是全局作用域
window // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}

二、JavaScript作用域链

在当前作用域没有找到调用的变量,会往上级找该变量

// 在test函数中,没有定义father变量,因此沿着作用域链向上找到定义在全局作用域的father
let father = 'a'
let test = function(){console.log(father)
}
test()
// a

作用域与执行上下文

JavaScript 属于解释型语言,JavaScript 的执行分为:解释和执行两个阶段
解释阶段:
词法分析
语法分析
作用域规则确定
执行阶段:
创建执行上下文
执行函数代码
垃圾回收
JavaScript 解释阶段便会确定作用域规则,因此作用域在函数定义时就已经确定了,而不是在函数调用时确定,但是执行上下文是函数执行之前创建的。执行上下文最明显的就是 this 的指向是执行时确定的。而作用域访问的变量是编写代码的结构确定的。
执行上下文在运行时确定,随时可能改变;作用域在定义时就确定,并且不会改变。

总结

good night

JavaScript作用域和作用域链详解相关推荐

  1. JavaScript 作用域(Scope)详解

    JavaScript 作用域(Scope)详解 先对需要用到的名词解释一下,再通过例子深入理解 一.什么是作用域(Scope) [[scope]]:每个javascript函数都是一个对象,对象中有些 ...

  2. JavaScript数据结构与算法——链表详解(上)

    注:与之前JavaScript数据结构与算法系列博客不同的是,从这篇开始,此系列博客采用es6语法编写,这样在学数据结构的同时还能对ECMAScript6有进一步的认识,如需先了解es6语法请浏览ht ...

  3. JavaScript数据结构与算法——数组详解(下)

    1.二维与多维数组 JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组. 1.1 创建二维数组 二维数组类似一种由行和列构成的数组表格,在JavaScript ...

  4. Token 防盗链详解

    前言 随着互联网的高速发展,无论是移动 APP 还是 WEB 站点,访问的安全问题始终困扰着内容提供商.CDN ( Content Delivery Network,内容分发网络 ) 服务作为当今互联 ...

  5. JavaScript 身份证号有效验证详解及实例代码

    这篇文章主要介绍了JavaScript 身份证号有效验证详解及实例代码的相关资料,需要的朋友可以参考下 JavaScript验证身份证号 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  6. JavaScript数据结构与算法——链表详解(下)

    在JavaScript数据结构与算法--链表详解(上)中,我们探讨了一下链表的定义.实现原理以及单链表的实现.接下来我们进一步了解一下链表的其他内容. 1.双向链表 双向链表实现原理图: 与单向链表不 ...

  7. JavaScript数据结构与算法——队列详解(下)

    接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...

  8. JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用

    1.上篇回顾: 上篇我们实现了一个列表类,并添加了一些属性,实现了比较多的方法,本文章将与大家一起使用列表实现一个图书借阅查询系统.需要使用JavaScript数据结构与算法--列表详解(上)中写好的 ...

  9. JavaScript数据结构与算法——列表详解(上)

    列表是一组有序的数据,每个数组中的数据项称为元素.数组相关知识不够了解的伙伴可以阅读本人上篇博客在JavaScript中,列表的元素可以是任意数据类型.列表中可以保存不定数量的元素,实际使用时元素的数 ...

最新文章

  1. 后端开发面试自我介绍_字节跳动暑期实习后端开发面试经历
  2. Codeforces 854 C Planning 贪心 最大堆
  3. Auty 2017——WebMonitor接口本地检测平台
  4. TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成过程全记录
  5. 【学习笔记】利用Excel实现简易版大屏
  6. 什么是spring(转载)
  7. 指针传递和strcpy的实现
  8. 5G 兴起,物联网安全危机四伏
  9. 用c语言编电话薄系统,求助 哈稀表编电话薄程序(c语言) 算法
  10. load data infile 补充
  11. 素数表(Prime number table)
  12. 传统直线检测算法与基于深度学习的直线检测算法
  13. Real-Time Video Super-Resolution with Spatio-Temporal Networks and Motion Compensation论文解析(视频超分)
  14. 现在做什么能挣钱?想要在互联网赚钱,一定要懂这些!
  15. 西交计算机科学与技术硕导,肖照林(硕导)
  16. Google CardBoard SDK for Unity集成指南
  17. 【朝花夕拾】Android编码风格拾遗
  18. 【拼多多笔试题】小熊战斗力
  19. Android9.0 Wifi模块Framework层分析
  20. SQLite管理软件 - SQLite Developer

热门文章

  1. 200瓦PFC方案200瓦pfc控制器方案,采用ucc28019a
  2. VR主题公园SPACES获得宋城演艺领投的650万美元融资
  3. java poi导出excel 设置单元格式为百分比现实
  4. Android UI界面目前做的最好的一个:索尼爱立信Xperia X10
  5. dita文档_使用DITA和SKOS进行主题分类
  6. 深度linux系统和win7,国产操作系统Deepin Linux(深度系统)安装体验-深度win7
  7. 从零开始写C++打怪小游戏(1)
  8. 如何进行SDK的测试
  9. Using Hierarchy Viewer
  10. 实验一 电路原理图的绘制