乐趣区

关于javascript:js数据类型闭包

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 
退出移动版