js 中有哪些数据类型及区别
根本数据类型
- string / number / boolean / undefined / null / symbol(代表创立之后举世无双,且不可变的数据类型)
援用数据类型
- Object
根本数据类型与援用数据类型的区别
- 申明变量时存储调配不同,根本数据类型存储在栈中,援用数据类型存储在堆中。
- 不同的内存分配机制导致拜访机制也不同。根本类型能够间接被拜访的,援用数据要先拜访存储在栈中的援用地址,再依据援用地址找到堆中的实体。(不能够间接拜访堆内存的地位以及间接操作堆内存空间,只能操作对象在栈内存中的援用地址)
- 赋值变量时不同,根本数据类型会将原始值的正本赋值给新的变量(传值),而援用类型是将援用类型的地址复制给新的变量(传址)
闭包
定义:1、函数中返回一个函数,2、函数申明的作用域和函数应用的作用域不同
用处:获取公有作用域的变量 (此处 timer 为公有作用域变量,这些变量能够保留到内存中)
const debounce = (()=>{
let timer = null;
return (callback,time)=>{timer && clearTimeout(timer)
timer = setTimeout(callback,time)
}
})()
闭包的优缺点
- 长处:防止全局变量的净化。变量长期贮存在内存中(缓存变量)
-
毛病:内存泄露(耗费),常驻内存,减少内存使用量
面试真题
// 一般形式 var fnArr = []; for(var i=0;i<10;i++){fnArr[i] = function(){return i} } console.log(i) // 后果为 10 console.log(fnArr[7]()) // 后果为 10 // 闭包写法 var fnArr = []; for(var i=0;i<10;i++){fnArr[i] = (function(){ let j = i; return function(){return j} })()} console.log(i) // 后果为 10 console.log(fnArr[7]()) // 后果为 7