面试题笔记

面试题笔记

一,重绘和重排

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

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

注意:重排一定重绘,重绘不一定重排。


二,为了达到移动设备的理想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,箭头函数

六,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,

业精于勤,荒于嬉,行成于思,毁于随~
原文地址:https://www.cnblogs.com/yu-tang/p/12109584.html