面试题笔记

面试题笔记html

一,重绘和重排前端

页面出现的过程当中:
1,获取html文档,构建DOM树,也就是页面的内容结构;
2,获取style文件,构建style树,也就是如何展现内容;
3,style树和DOM树结合,生成渲染树以后,才绘制网页,最终呈现结果。node

重排:当DOM树发生几何变化,致使页面从新计算元素宽高;
重绘:当style树发生内容改变,致使页面样式改变;es6

注意:重排必定重绘,重绘不必定重排。面试


二,为了达到移动设备的理想viewport,可使用meta标签对viewport进行控制,meta标签实现响应式网页的主要属性有:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2, user-scalable=no">编程

解析:
width – viewport的宽度
  height – viewport的高度
  initial-scale – 初始的缩放比例
  minimum-scale – 容许用户缩放到的最小比例
  maximum-scale – 容许用户缩放到的最大比例
  user-scalable – 用户是否能够手动缩放浏览器

三,js闭包函数
1,特色:闭包

 


四,前端事件冒泡和事件捕获函数

 

五,es6的经典语法
1,箭头函数this

六,js中的函数提高和变量提高(注意es6的块级做用域)
1,变量提高:js先将所有的变量进行声明,再回到声明的地方进行赋值,变量的声明的过程就是变量的提高。//变量声明是提高的,赋值是顺序的。
2,函数提高:直接将整个函数总体提高到做用域的最开始位置,至关于剪切过去的样子。
函数提高只会提高函数声明,而不会提高函数表达式:
function foo1 () {
console.log("foo1");
};//提高,而且提高以后为:var foo1 = function(){...},此时foo1是做为一个变量。

var foo2 = function () {
console.log("foo2");
};//不提高
3,变量和函数同时发生提高:函数提高优于变量提高。

注意:只有声明的变量和函数才会进行提高,隐式全局变量不会提高。“提高”的本质就是为了事先声明变量和函数,固然函数只有声明式函数才会被提高,字面量函数不会被提高。这种提高就是存在于做用域中,包括全局做用域、函数做用域(闭包造成的做用域也是个函数做用域),总之都是在做用域中声明变量和函数时,会提高到做用域顶部,进行事先声明。
JavaScript没有块做用域,只有全局做用域和函数做用域。ES6新增了let和const关键字,使得js也有了“块”级做用域,并且使用let和const 声明的变量和函数是不存在提高现象的,比较有利于咱们养成良好的编程习惯。

es6标准:
1,容许在块级做用域内声明函数;
2,函数声明(函数名称) 相似于 var,即会提高到全局做用域或函数做用域的头部;
3,同时,函数声明(函数总体) 还会提高到所在的块级做用域的头部。


ps:
function xxx(){} 这种函数声明。而不是 var xxx = function(){}这种函数表达式。前者,用本文的逻辑去考虑函数的提高和函数的块级做用域;后者,等价于变量的提高和变量的块级做用域。
若是换作严格模式下的 node 环境,那么将严格遵照 es6 标准:函数声明相似于 let。

ps:
声明全局变量:
1,函数内部没有声明,直接给变量赋值的是声明全局变量,执行函数的时候不进行变量提高;
2,函数内部写成 var a = b = c = 20; //隐式声明了全局变量b和c,b和c没有进行变量提高,可是a有;
3,var a =20, b = 30,c = 40; //中间以,分隔开表示同时定义了局部变量a,b,c,都进行变量提高;
4,var a =20; b = 30; c = 40; //中间以;分隔开表示同时定义了一个局部变量a和全局变量b和c,a有变量提高,b和c没有;

其实4和2是相等的。
七,js基本数据类型
1,JS基本有5种简单数据类型:String,Number,Boolean,Null,undefined。一种复杂的数据类型Object。
2,ES6基本数据类型:
ES6新增数据类型Symbol: 表示独一无二的值
typeof Symbol() // 'symbol'
typeof Number() // 'number'
typeof Sring() // 'string'
typeof Function() // 'function'
typeof Objecr() // 'object'
typeof Boolean() // 'boolean'
typeof null() // 'object'
typeof undefined() // 'undefined'。


八,域


九,关于this,当前对象

1, window自动被浏览器声明
// 1.调用对象未声明的属性会undifned
    var user={};
    console.log(user.name);//undifned
    // 2.使用未赋值只声明的基本数据类型会undifned
    var one;
    console.log(one);//undifned
    // 3.使用未声明的变量会报错
    console.log(two);//new_file.html:15 Uncaught ReferenceError: two is not defined

window对象已经自动被浏览器声明了,只是尚未声明count属性,因此调用window对象的未声明属性也是undifned

2,函数使用严格模式‘use strict’:
function foo(){'use strict'
console.log(this.location);
}
foo();//'use strict'是严格模式,严格模式函数中法this禁止指向全局对象window,这个this是undefined。

3,