JavaScript
# JavaScript
(建议收藏)原生JS灵魂之问, 请问你能接得住几个?(上) (opens new window)
# js 的数据类型
# 原始数据类型
- number
- string
- boolean
- null
- undefined
- bigint
- symbol
# 引用数据类型
对象Object(包含普通对象-Object,数组对象-Array,正则对象-RegExp,日期对象-Date,数学函数-Math,函数对象-Function)
# js 数据类型检测方法
- typeof
- 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__;
}
}
- Object.prototype.toString.call
- constructor
JS 闭包经典使用场景和含闭包必刷题 (opens new window)
# js 堆栈内存释放
堆内存:存储引用类型值,对象类型就是键值对,函数就是代码字符串。
堆内存释放:将引用类型的空间地址变量赋值成
null
,或没有变量占用堆内存了浏览器就会释放掉这个地址。栈内存:提供代码执行的环境和存储基本类型值。
栈内存释放:一般当函数执行完后函数的私有作用域就会被释放掉。
# 闭包
定义:当一个函数能够记住并访问到其所在的词法作用域及作用域链,特别强调是在其定义的作用域外进行访问,此时该函数及其上层执行上下文共同构成闭包。
形成原因:内部的函数存在外部作用域链的引用就会产生闭包。
作用:
保护函数的私有变量不受外部的干扰。形成不销毁的栈内存。
把一些函数内的值保存下来。闭包可以实现方法和属性的私有化。