let与var的区别
- let同一作用域下不可以重复声明变量,var可以
- let不会参与预解析,var会预解析
- let在块级作用域内有效,var在函数作用域内有效
什么是预解析
- 预解析指的是在浏览器加载JS文件之前,在找到var和function命令之前,将声明的对象赋值为undefined的操作
let和var是都都存在变量提升
- let和var都存在变量提升的操作,但是let在变量提升后,并没有像var一样,将变量赋值为undefined
BFC是什么?如何触发?BFC解决了什么问题?
- BFC (block format context) 块级格式化上下文
- 如何触发:
position: absolute;display: inline-block;float: left/right;ovarflow: hidden;- 解决了什么问题:
margin 合并
盒模型的组成部分
- margin + border + padding + content = (width + height)
什么是执行期上下文
- 当函数执行时,会创建一个成为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行上下文将会被销毁。
预编译
- 函数声明整体提升
- 变量 声明提升
- 预编译发生在函数执行的前一刻
- 创建AO对象 Activation Object(执行期上下文)
- 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
- 将实参值和形参统一
- 在函数体里面找函数声明,值赋予函数体
暗示全局变量(imply global)
- 即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有
全局对象是什么
- 全局变量就是window
- 一切声明的变量都归window所有