美文网首页
JS红宝书-- 4.2 执行环境及作用域

JS红宝书-- 4.2 执行环境及作用域

作者: fanison | 来源:发表于2020-07-24 07:38 被阅读0次

所有变量(包括基本类型和引用类型)都存在一个执行环境(也称为作用域链)当中,这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量。

  • 执行环境有全局执行环境(也称为全局环境)和函数执行环境之分
  • 每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链
  • 函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全局环境
  • 全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据
  • 变量的执行环境有助于确定应该何时释放内存
var color = "blue";
function changeColor(){
  var anotherColor = "red";
  function swapColors(){
    var tempColor = anotherColor;
    anotherColor = color;
    color = tempColor;
    // 可以访问 color、anotherColor、tempColor
  }
  // 可以访问 color、anotherColor,不能访问tempColor
  swapColors();
}
// 只能访问color
changeColor();

三个执行环境: 全局环境、 changeColor()局部环境、swapColor()局部环境;
swapColor()其作用域包含3个对象:swapColor()的变量对象、changeColor()的变量对象和全局变量对象;
swapColor()局部环境开始会先在自己的变量对象中搜索变量和函数名,如果搜索不到再搜索上一级作用域链。

延长作用域链

  • try-catch语句的catch块:创建新的变量对象,其中包含的是被抛出的错误对象的声明

  • with 语句:会将指定的对象添加到作用域链中

function buildUrl(){
  var qs = "?debug=true";
  with(location){
    var url = href + qs;
  }
  return url;
}

没有块级作用域

  • 声明变量

使用var声明的变量会自动被添加到最接近的环境

在函数内部,最接近的环境就是函数的局部环境

function add(num1,num2){
  var sum = sum1 + sum2;
  return sum;
}
var result = add(10,20) ;     //30
alert(sum) ;    //由于sum不是有效的变量,因此会导致错误

若初始化没有使用var声明,该变量会自动被添加到全局环境

function add(num1,num2){
  sum = sum1 + sum2;
  return sum;
}
var result = add(10,20);      //30
alert(sum) ;                 //30
  • 查询标识符
var color = "blue";
function getColor(){
  return color;
}
alert(getColor());    //  "blue"
var color = "blue";
function getColor(){
  var color = "red";
  return color;
}
alert(getColor());    //  "red"

相关文章

  • JS红宝书-- 4.2 执行环境及作用域

    所有变量(包括基本类型和引用类型)都存在一个执行环境(也称为作用域链)当中,这个执行环境决定了变量的生命周期,以及...

  • JS执行环境及作用域

    执行环境是JavaScript中很重要的概念。执行环境定义了变量有权访问其它数据。 全局执行环境就是最外围的环境,...

  • JS学习之执行环境和作用域

    JS学习之执行环境和作用域 执行环境和作用域相关介绍 执行环境 执行环境定义了变量或函数有权访问的其他数据,决定了...

  • javascript的执行上下文—作用域链 闭包

    js作用域:函数作用域、全局作用域作用域链:由当前环境与上层环境的一系列变量对象组成,它保证了当前执行环境对符合访...

  • js函数中的this

    前两篇文章“执行环境和作用域”和“js中的闭包”,我对谈了执行环境、作用域、作用域链和闭包的理解。但当牵涉到对象中...

  • 作用域与this

    作用域与 this 一、作用域 1.1 JS 中的内存空间分为两种: 栈内存:提供 js 代码的执行环境;存储基本...

  • JS 作用域与作用域链

    1. 作用域 作用域就是代码的执行环境,全局执行环境就是全局作用域,函数的执行环境就是私有作用域,它们都是栈内存。...

  • 作用域和作用域链

    1. 作用域 作用域就是代码的执行环境,全局执行环境就是全局作用域,函数的执行环境就是私有作用域,它们都是栈内存。...

  • 执行环境及作用域

    执行环境 执行环境(execution context),定义了变量或函数有权访问的其他数据,决定了它们各自的行为...

  • 执行环境及作用域

    作用域的作用:保证对执行环境有权访问的所有变量和函数有序访问。 函数执行时,标识符解析会沿着作用域链向上一级一级查...

网友评论

      本文标题:JS红宝书-- 4.2 执行环境及作用域

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