1. 说一下对变量提升的理解
分为变量定义和函数声明(和函数表达式的区别)
全局作用域和函数作用域或者是块级作用域(ES6)中,变量声明(var)和函数声明会被提升到作用域顶部,
而函数表达式不会,只是当做一个var变量提升,函数没有被提升,另外ES6 中 let 和 const标识符定义的变量
也不会发生提升(临时性死区TDZ)
2. this几种不同的使用场景
作为构造函数
作为对象属性
作为普通函数
call,bind,apply
箭头函数中(ES6)
3. 创建10个<a>标签,点击弹出对应序号
使用IIFE,每次都创建一个独立的函数,传入不同的i
或者ES6 let 循环
4. 如何理解作用域
(1)自由变量: 在当前作用域没有被定义的变量
(2)若在当前作用域找不到,则往父级作用域查找,自由变量的查找,父级作用域:函数定义时所在的上下文
(3)闭包两个场景,作为参数传入和函数返回值
5. 实际开发中闭包应用
// 用于封装变量,收敛权限
只有通过返回函数能对_list数组操作,外部不可见