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) //后果为 10console.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) // 后果为10console.log(fnArr[7]()) //后果为 7