随记

92 阅读2分钟

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 合并


盒模型的组成部分

  • margin + border + padding + content = (width + height)

什么是执行期上下文

  • 当函数执行时,会创建一个成为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行上下文将会被销毁。

预编译

  • 函数声明整体提升
  • 变量  声明提升
  • 预编译发生在函数执行的前一刻
  • 创建AO对象 Activation Object(执行期上下文)
  • 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
  • 将实参值和形参统一
  • 在函数体里面找函数声明,值赋予函数体

暗示全局变量(imply global)

  • 即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有

全局对象是什么

  • 全局变量就是window
  • 一切声明的变量都归window所有