面试学习4

浏览器跨标签通信

  • 获取句柄,父页面通过window.open()这个接口打开子页面,然后设置当子页面加载onload的时候,将传递的信息作为postMessage的参数;这时子页面上就可以调用window.onmessage接口,获取到父页面传递过来的信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //A.html
    const child = window.open('child.html', 'child')
    child.onload = () => {
    child.postMessage('message', location.origin)
    }
    //B.html
    window.onmessage = event => {
    event.data
    }
  • localstorage、cookie

内存泄漏

  • 意外的全局变量,使得这个变量挂在window对象上,没办法被清除,解决方法是:使用严格模式、将其设置为null
  • 忘记关停定时器,导致定时器内的dom节点一直被引用,没办法回收
  • 没有移除事件监听器
  • 闭包
  • 本以为已经移除了一些没用的dom节点,没想到移除的dom节点还被其他节点所引用,导致无法彻底移除