JavaScript作用域
JavaScript作用域
是什么?
作用域是你的代码在运行时,各个变量、函数和对象的可访问性
为什么需要?
最小访问原则
分类
- 全局作用域
- 局部作用域
1.全局作用域
JavaScript 文档中(document)只有一个全局作用域。定义在函数之外的变量会被保存在全局作用域中
2.局部作用域
定义在函数中的变量就在局部作用域中。并且函数在每次调用时都有一个不同的作用域。这意味着同名变量可以用在不同的函数中。因为这些变量绑定在不同的函数中,拥有不同作用域,彼此之间不能访问。
块语句
块级声明包括if和switch,以及for和while循环,和函数不同,它们不会创建新的作用域。在块级声明中定义的变量从属于该块所在的作用域。
上下文
上下文通常涉及到你代码某些特殊部分中的this值。作用域指的是变量的可见性,而上下文指的是在相同的作用域中的this的值。在全局作用域中,上下文总是 Window 对象。
执行环境
作用域
(JavaScript 是一种单线程语言,所以它同一时间只能执行单个任务。其他任务排列在执行环境中。当 JavaScript 解析器开始执行你的代码,环境(作用域)默认设为全局。全局环境添加到你的执行环境中,事实上这是执行环境里的第一个环境。
之后,每个函数调用都会添加它的环境到执行环境中。无论是函数内部还是其他地方调用函数,都会是相同的过程。
每个函数都会创建它自己的执行环境。
当浏览器执行完环境中的代码,这个环境会从执行环境中弹出,执行环境中当前环境的状态会转移到父级环境。浏览器总是先执行在执行栈顶的执行环境(事实上就是你代码最里层的作用域)。)
- 创建阶段
- 执行阶段