JavaScript

# JavaScript

(建议收藏)原生JS灵魂之问, 请问你能接得住几个?(上) (opens new window)

# js 的数据类型

# 原始数据类型

  1. number
  2. string
  3. boolean
  4. null
  5. undefined
  6. bigint
  7. symbol

# 引用数据类型

对象Object(包含普通对象-Object,数组对象-Array,正则对象-RegExp,日期对象-Date,数学函数-Math,函数对象-Function)

# js 数据类型检测方法

  1. typeof
  2. instanceof
// 基于原型链向上查找
function myInstanceof(leftValue, rightValue) {
  // 取右表达式的 prototype
  let rightProto = rightValue.prototype;
  // 取左表达式的 __proto__
  leftValue = leftValue.__proto__;
  while(true) {
    if (leftValue === null) return false;
    if (leftValue === rightProto) return true;
    leftValue = leftValue.__proto__;
  }
}
  1. Object.prototype.toString.call
  2. constructor

JS 闭包经典使用场景和含闭包必刷题 (opens new window)

# js 堆栈内存释放

  • 堆内存:存储引用类型值,对象类型就是键值对,函数就是代码字符串。

  • 堆内存释放:将引用类型的空间地址变量赋值成 null,或没有变量占用堆内存了浏览器就会释放掉这个地址。

  • 栈内存:提供代码执行的环境和存储基本类型值。

  • 栈内存释放:一般当函数执行完后函数的私有作用域就会被释放掉。

# 闭包

定义:当一个函数能够记住并访问到其所在的词法作用域及作用域链,特别强调是在其定义的作用域外进行访问,此时该函数及其上层执行上下文共同构成闭包。

形成原因:内部的函数存在外部作用域链的引用就会产生闭包。

作用:

  • 保护函数的私有变量不受外部的干扰。形成不销毁的栈内存。

  • 把一些函数内的值保存下来。闭包可以实现方法和属性的私有化。

LOSER
米津玄師