作用域

作者: 小豆soybean | 来源:发表于2021-08-20 17:45 被阅读0次

函数存在scope属性。
原文链接:https://www.cnblogs.com/zhimao/p/15061102.html

1. 作用域

作用域是指程序源代码中定义的范围

作用域规定了如何设置变量,也就是确定当前执行代码对变量的访问权限

JavaScript采用词法作用域,也就是静态作用域

1.1 词法作用域

所谓词法作用域, 是指函数的作用域在函数的定义时就已经确定了

示例

var value = 1;

function foo() {
    console.log(value);
}

function bar() {
    var value = 2;
    foo();
}

bar();   // 1

2. 作用域链

js中, 函数存在一个隐式属性 [[scopes]], 这个属性用来保存当前函数的执行上下文环境, 由于在数据结构上是链式的, 因此也被称作是作用域链, 我们可以把它理解为一个数组

可以理解为是一系列的AO对象所组成的一个链式结构

函数存在[[scopes]]属性

function a() {}

console.dir(a) // 打印内结构

image

当函数被调用后

function a() {
  console.dir(a);
}
// 调用函数
a()

image

因此我们可以得出一个结论: [[scopes]] 属性在函数声明时产生, 在函数调用时更新

即: 在函数被调用时, 将该函数的AO对象压入到[[scopes]]中

3. 作用域链的作用

作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的

最直观的表现就是:

  • 内部函数可以使用外部函数声明的变量

示例

function a() {
  var i = 100
  function b() {
    console.log(i);
  }
  b()
}
a()     // 100

  • 外部函数不可以使用内部函数声明的变量

示例

function a() {
  var i = 100
  function b() {
    var i = 200
    console.log(i);
  }
  b()
}
a()     // 200

仅记录自己的学习总结,如有错误,还请评论指正~

相关文章

  • js作用域

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 作用域,作用域链

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • 一网打尽 JavaScript 的作用域

    JavaScript 的作用域包括:模块作用域,函数作用域,块作用域,词法作用域和全局作用域。 全局作用域 在任何...

  • 作用域

    词法作用域,动态作用域,全局作用域,局部作用域,函数作用域,块级作用域,有些地方还能看到隐式作用域和显示作用域。 ...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

  • [ES6]1.1作用域

    作用域 全局作用域(global/window) 函数作用域/局部作用域(function) 块状作用域({}) ...

  • C - 作用域

    C - 作用域 一个 C 变量的作用域可以是: 块作用域 函数作用域 函数原型作用域 或 文件作用域 作用域描述程...

  • JavaScript作用域分类

    JavaScript作用域分类全局作用域局部作用域函数作用域块级作用域catchwithlet 和 const 什...

  • JS基础---05作用域

    JavaScript基础 1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作...

网友评论

      本文标题:作用域

      本文链接:https://www.haomeiwen.com/subject/yegtiltx.html