JS笔记:执行环境与作用域

一、概念解析

1. 执行环境

是Js中最为重要的一个概念,执行环境定义了变量或者函数有权访问的其他数据,决定了它们各自的行为。

执行环境分类
(1)全局执行环境
指的是全局的,不在任何函数里的代码
全局执行环境是最外围的一个执行环境。在 Web 浏览器中,全局执行环境被认为是 window 对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。代码载入浏览器时,全局执行环境被创建(当我们关闭网页或者浏览器时全局执行环境才被销毁)

(2)函数执行环境
在函数体内的代码
每个函数都有自己的执行环境,当执行进入一个函数时,函数的执行环境就会被推入一个执行环境栈的顶部并获取执行权。当这个函数执行完毕,它的执行环境又从这个栈的顶部被删除,并把执行权并还给之前执行环境

2. 变量对象

每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

变量对象包含,var定义的变量, function定义的函数, 以及形参
例子:


对于这段代码变量对象有两部分:
通过变量声明定义的变量color
通过函数声明定义的函数 changeColor

3. 活动对象

如果这个环境是函数,则将其活动对象作为变量对象。活动对象是在进入函数的执行环境时创建的,并为该对象初始化一个 arguments 对象(这个对象在全局环境是不存在的!)。
上面的代码活动对象当执行changeColor函数时被创建:

  1. 初始化生成的 arguments 对象
  2. 通过变量声明的变量 color2.

4. 作用域链

当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。

当多个函数嵌套关系时,内层的函数可以访问外层的变量,反之则不行。这就是作用域链的核心。解析过程是沿着作用域链一级一级从自身向外层搜索的。

JS笔记:执行环境与作用域_第1张图片
图片发自App

你可能感兴趣的:(JS笔记:执行环境与作用域)