作用域
作用域的分类
1.全局作用域 2.函数作用域
作用域的定义
作用域是指在程序中定义变量的区域,该位置决定了变量的生命周期。通俗地理解,作用域就是变量与函数的可访问范围,即作用域控制着变量和函数的可见性和生命周期。
作用域的作用
防止不同范围的变量之间相互干扰
全局作用域
不属于任何函数的外部范围称为全局作用域 全局变量 定义:保存在全局作用域的变量 优点:可反复使用。 缺点:全局污染(开发时禁止使用)。
函数作用域
一个函数内的范围称为函数作用域。 局部变量 定义:保存在函数作用域的变量(::形参变量也是函数内的局部量::)。 优点:不会被污染。 缺点:无法反复使用。
注意: 只有函数的{}才能形成作用域。 不是所有的{}都能形成作用域;也不是所有的{}内的变量都能是局部变量。
- 对象的{}就不是作用域
- 对象中的属性也不是局部变量
作用域链
因为,js规定,一个函数,既能用自己作用域的变量,又能用外层作用域的变量。所以,需要一个“路线图”告诉每个函数,自己都可以去哪里找到想用的变量。就像生活中我们规划旅游景点的游览路线一样。 一个函数可用的所有作用域串联起来,就行成了当前函数的作用域链。(本质上是一个对象)
总结:
作用域和作用域链本质上都是对象结构。 全局作用域其实是一个名为window的对象,所有全局变量和全局函数都是window对象的成员。 函数作用域其实是JS引擎在调用函数时才临时创建的一个作用域对象,用来保存函数的局部变量,而函数调用完,函数作用域对象就释放了。
最后
函数的调用过程VS做饭三部曲
- 第一步:厨师准备食材(创建函数作用域对象保存局部变量)
- 第二步:厨师按所学菜谱上的步骤做菜(js按函数体规定的步骤执行每一项操作)
- 第三步:收拾厨房保持干净整洁(js会在函数调用后自动释放临时创建的函数作用域对象)