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