js 高级程序设计笔记 第四章

171 阅读2分钟

一. 基础概念

  • 变量的两种数据类型:基本类型值 (简单的数据段), 引用类型值(多个值构成的对象)
  • 基本数据类型 : null ,undefined ,boolean, number,string (新增两种: bigint symbol
  • 基本类型 在栈内存中 有固定大小 引用类型保存在内存中 ,操作时是对操作对象的引用(添加/删除除外)
  • 不能给基本类型加属性
  • 复制一个基本类型的值,会在栈上创建一个新的值(互不影响)
  • 复制一个引用类型的值,则是复制一份值,指针指向同一个堆的地址
  • 访问变量的两种方式 按照值 / 按照引用
  • 检测类型 typeof XX / xx instanceof AAA

二.重要概念

  • 执行环境 - 变量对象
  • 全局环境是最外围的执行环境 window 对象
  • 每个函数都有自己的执行环境
  • 代码进入执行环境会生成作用域链

三.代码说明

1.函数的作用域问题

  // 2.函数作用域问题
  // 知识点:作用域链向上查找变量,最上层为win
  var color = 'red';
  function changeColor() {
    var color2 = 'blue';
    function swapColor() {
      var temp = color2;
      color2 = color;
      color = temp;
      console.log(color,color2,temp,"1111") // blue red blue 原因1:函数在win 中可访问win中变量 color 也可以查找到父级的参数
    }
    console.log(color,color2,temp,"2222222")  // blue red undefined //原因2:环境不能向下搜索自己的子函数变量的部分
    swapColor()
  }
  changeColor()
  console.log(color, color2, temp, "333333") //  blue undefined undefined 原因3:color 在全局环境中 是win的环境变量

2.变量的声明

  • 使用var声明的变量会被添加到最近的环境中


// 3.变量声明
// 不声明会变成 全局变量  声明了var才能成为局部变量
  function add(num1, num2) {
    var sum = num1 + num2;
    sum2 = num1 + num2;
    return sum;
  }
  add(1, 2)
  console.log(sum) //sum is not defined ,  var 定义的变量会添加到最近的环境中 也就是 fn:add()
  console.log(sum2)// sum2 : 3 , 没有用var 申明成为全局变量