JavaScript作用域和作用域链详解
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作用域和作用域链详解相关推荐
- JavaScript 作用域(Scope)详解
JavaScript 作用域(Scope)详解 先对需要用到的名词解释一下,再通过例子深入理解 一.什么是作用域(Scope) [[scope]]:每个javascript函数都是一个对象,对象中有些 ...
- JavaScript数据结构与算法——链表详解(上)
注:与之前JavaScript数据结构与算法系列博客不同的是,从这篇开始,此系列博客采用es6语法编写,这样在学数据结构的同时还能对ECMAScript6有进一步的认识,如需先了解es6语法请浏览ht ...
- JavaScript数据结构与算法——数组详解(下)
1.二维与多维数组 JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组. 1.1 创建二维数组 二维数组类似一种由行和列构成的数组表格,在JavaScript ...
- Token 防盗链详解
前言 随着互联网的高速发展,无论是移动 APP 还是 WEB 站点,访问的安全问题始终困扰着内容提供商.CDN ( Content Delivery Network,内容分发网络 ) 服务作为当今互联 ...
- JavaScript 身份证号有效验证详解及实例代码
这篇文章主要介绍了JavaScript 身份证号有效验证详解及实例代码的相关资料,需要的朋友可以参考下 JavaScript验证身份证号 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- JavaScript数据结构与算法——链表详解(下)
在JavaScript数据结构与算法--链表详解(上)中,我们探讨了一下链表的定义.实现原理以及单链表的实现.接下来我们进一步了解一下链表的其他内容. 1.双向链表 双向链表实现原理图: 与单向链表不 ...
- JavaScript数据结构与算法——队列详解(下)
接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...
- JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用
1.上篇回顾: 上篇我们实现了一个列表类,并添加了一些属性,实现了比较多的方法,本文章将与大家一起使用列表实现一个图书借阅查询系统.需要使用JavaScript数据结构与算法--列表详解(上)中写好的 ...
- JavaScript数据结构与算法——列表详解(上)
列表是一组有序的数据,每个数组中的数据项称为元素.数组相关知识不够了解的伙伴可以阅读本人上篇博客在JavaScript中,列表的元素可以是任意数据类型.列表中可以保存不定数量的元素,实际使用时元素的数 ...
最新文章
- 后端开发面试自我介绍_字节跳动暑期实习后端开发面试经历
- Codeforces 854 C Planning 贪心 最大堆
- Auty 2017——WebMonitor接口本地检测平台
- TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成过程全记录
- 【学习笔记】利用Excel实现简易版大屏
- 什么是spring(转载)
- 指针传递和strcpy的实现
- 5G 兴起,物联网安全危机四伏
- 用c语言编电话薄系统,求助 哈稀表编电话薄程序(c语言) 算法
- load data infile 补充
- 素数表(Prime number table)
- 传统直线检测算法与基于深度学习的直线检测算法
- Real-Time Video Super-Resolution with Spatio-Temporal Networks and Motion Compensation论文解析(视频超分)
- 现在做什么能挣钱?想要在互联网赚钱,一定要懂这些!
- 西交计算机科学与技术硕导,肖照林(硕导)
- Google CardBoard SDK for Unity集成指南
- 【朝花夕拾】Android编码风格拾遗
- 【拼多多笔试题】小熊战斗力
- Android9.0 Wifi模块Framework层分析
- SQLite管理软件 - SQLite Developer