• 面试题笔记


    面试题笔记

    一,重绘和重排

    页面出现的过程中:
    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,

    业精于勤,荒于嬉,行成于思,毁于随~
  • 相关阅读:
    Codeforces Round #613 选讲
    Codeforces Round #612 选讲
    Codeforces917E
    一道题20
    LOJ#2244. 「NOI2014」起床困难综合症
    求欧拉回路
    *LOJ#2134. 「NOI2015」小园丁与老司机
    vim操作命令
    常见问题解决
    CentOS7下如何修改mysql的数据目录
  • 原文地址:https://www.cnblogs.com/yu-tang/p/12109584.html
Copyright © 2020-2023  润新知