JS知识|青训营笔记

74 阅读2分钟

JS基本数据类型

数据类型

  • 基础类型
  1. 字符串
  2. 数字
  3. null
  4. undefined
  5. symbol
  6. bigInt
  7. 布尔
  • 对象 数组 函数等

作用域

变量的可访问性和可见性
静态作用域,通过它就能够预测代码在执行过程中如何查找标识符
全局作用域
在文件顶部声明 函数作用域
在函数内部声明 块级作用域

变量提升

JavaScript 只有声明的变量会提升,初始化的不会。

  • var有变量提升
    console.log(a);
    var a = 3;
    输出了 undefined,这是因为变量声明 (var a) 提升了,但是初始化(a = 3) 并不会提升,所以 a 变量是一个未定义的变量。
  • let. const没有变量提升,提前访问会报错
  • function函数可以先调用再定义
  • 赋值给变量的函数无法提前调用

JS是怎么执行的

  • 词法环境:基于ECMAScript代码的词法嵌套结构来定义标识符和具体变量和函数的关联。- 一个词法环境由环境记录器和一-个可能的引用外部词法环境的空值组成
  • 变量环境:变量环境和词法环境的一-个不同就是前者被用来存储函数声明和变量(let 和const)绑定,而后者只用来存储var变量绑定
  • Outer:指向外部变量环境的一个指针

this指向
JavaScript this 关键字 | 菜鸟教程 (runoob.com)

普通函数的this指向windows

  • 在方法中,this 表示该方法所属的对象。
  • 如果单独使用,this 表示全局对象。
  • 在函数中,this 表示全局对象。
  • 在函数中,在严格模式下,this 是未定义的(undefined)。
  • 在事件中,this 表示接收事件的元素。
  • 类似 call() 和 apply() bind()方法可以将 this 引用到任何对象。
    小总结:在使用过程中尽量多使用箭头函数来解决this指向的困扰,函数中谁调用它this就指向谁

JavaScript 闭包

闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。

直观的说就是形成一个不销毁的栈环境。

function A() {
    var counter = 0;
    function B() {
        counter += 1
        return counter;
    }
    return B
var a=A()