目录
基础
Undefined和null有什么区别
理解JSON
什么是作用域
什么是闭包
Js常见的垃圾回收方式是标记清除
let、var、const区别
This指向
HTML
HTML标签的嵌套规则
meta标签有什么作用
CSS
div嵌套img时多出的空白如何解决
margin击穿问题如何解决
实现左右两边固定宽度,中间自适应的布局
JS
作用域的变量提升
bind和apply的区别
箭头函数的新特性
多次引入同一个模块,会触发几次模块的全局事件
基础
Undefined和null有什么区别
- Undefined
-
表示声明了变量没有赋值
-
Undefined不是有效JSON
-
Undefined的类型是undefined
- null
-
表示一个对象的值为空,是一个空对象
-
Null是一个有效的JSON
-
Null的类型是object
理解JSON
JSON是一个JS对象,也是一种轻量级的数据交换格式
- JSON.Stringify() 转化成字符串
- JSON.parse() 转化成JSON对象
什么是作用域
JavaScript中的作用域是我们可以有效访问变量或函数的区域,是一组用于查找变量的规则,如果变量在当前作用域中不存在,它会向外部作用域中查找,直到到达全局作用域,这个查找过程叫作用域链,JS中的作用域链主要用于解析变量的值。
全局作用域
- 在全局命名空间中声明的变量或函数位于全局作用域中,在代码的任何地方可以访问
函数作用域
- 函数在函数中声明的变量函数和参数可以在函数内部访问,但不能在函数外部访问
块作用域
什么是闭包
闭包就是有权访问一个函数内部变量的函数
- 函数嵌套函数
- 函数内部可以引用外部参数和变量
- 参数和变量不会被垃圾回收机制回收
Js常见的垃圾回收方式是标记清除
工作原理:当变量进入环境时,将这个变量标记为进入环境,当变量离开环境时,则将其标记为“离开环境”,标记离开环境的就回收内存。
let、var、const区别
Var没有块级作用域,支持变量提升
Let
Const
- 有块级作用域,不支持变量提升
- 声明一个变量一旦声明不能改变
This指向
This总是代表它的直接调用者
- 默认情况下没有直接调用者,this指向的是window
- 严格模式下没有直接调用者,this指向的是undefined
HTML
HTML标签的嵌套规则
- 不乱嵌套,块级元素可以嵌套行内元素,行内元素不能嵌套块级元素
- 标签闭合,属性小写
- 使用外链css和js实现结构行为表现分离
Meta标签提供有关页面的元信息
- Viewport主要用于移动端,设置宽度为设备宽度
- initial-scale:设置页面的初始缩放值
- User-scalable:是否允许用户缩放
CSS
div嵌套img时多出的空白如何解决
产生空白的原因,img标签的display属性默认是inline
- Div{font-size:0}
- Img{display:block}
- Img{vertical-align:top}
- div{line-hight:0}
margin击穿问题如何解决
- 父元素加边框
- 父元素overflow:auto
- 父元素display:flex或者display:inline-block
- 使用绝对定位
实现左右两边固定宽度,中间自适应的布局
- float解决 使用左浮动和右浮动,中间设置margin
- 绝对定位解决 使用right:0和left:0,中间设置左右margin(外边距)
- flex解决 父元素设置display:flex,左右设置宽度,中间设置flex:1===flex:1 1 auto
- table解决 父元素设置display:table 子元素设置为display:table-cell
- 网格布局 父元素设置display:grid grid-template-rows //横向排列 grid-template-columns //纵向排列
JS
作用域的变量提升
变量提升只发生在当前作用域,所有的声明都会提升到作用域的最顶端
bind和apply的区别
Bind执行函数,方便随后调用,apply和call则是立即执行。Apply传入的参数为数组。
箭头函数的新特性
- 没有this
- 箭头函数是匿名函数,不能作为构造函数,不能使用new
- 箭头函数内没有arguments
多次引入同一个模块,会触发几次模块的全局事件
组件化重要的特性就是作用域隔离,一个组件拥有一个私有的作用域,当在页面中引用了该组件的时候,只有该组件实例能访问该作用域。
(持续更新)