WEB前端面试

316 阅读3分钟

一、渲染机制

什么是DOCTYPE及作用

  • DTD就是告诉浏览器我是什么文档类型,浏览器便以此判断用什么引擎来解析渲染它

  • DOCTYPE就是直接告诉浏览器什么是DTD

HTML5

HTML4.01 Strict(严格模式)

HTML4.01 Transitional(宽松模式)

浏览器渲染过程

重排

重绘

二、错误监控

即时运行错误的捕获方式

  1. try...catch
  2. window.onerror

资源加载错误

  1. object.onerror
  2. performance.getEntries()
  3. Error事件捕获

上报错误的基本原理

  1. 采用Ajax通信方式上报
  2. 利用Image对象上报

三、bind/call/apply的区别

相同点:

  1. 都是用来改变函数的this对象的指向的;
  2. 第一个参数都是this要指向的对象;
  3. 都可以利用后续参数传参。

区别

  • call 对函数直接调用 第一个参数是改变this指向的对象 直接传参

    函数名.call(目标对象,参数1,参数2,...参数n)
    例如:getName.call(obj, 'Leslie', 18)
    
  • apply 对函数的直接调用 第一个参数是改变this指向的对象 参数用数组包裹

    函数名.apply(目标对象,[参数1,参数2,...参数n])
    例如:getName.apply(obj, ['Leslie', 18])
    
  • bind 返回一个函数 第一个参数是改变this指向的对象 直接传参

    getName.bind(obj, 'Leslie', 18)()
    或
    getName.bind(obj)('Leslie', 18)
    
  • call和apply是直接调用函数

  • bind是返回函数本身,如果要执行,必须再后面再加()调用

    getName.bind(obj)()
    

四、Webpack打包原理

webpack只是一个打包模块的机制,只是把依赖的模块转化成可以代表这些包的静态文件。webpack就是识别你的入口文件,识别你的模块依赖,来打包你的代码。webpack做的就是分析代码、转换代码、编译代码、输出代码。

示例:

const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {    
    // 入口起点    
    entry: './src/index.js',    
    output: {        
        // 输出文件名        
        filename: 'built.js',        
        // 输出路径        
        // __dirname,nodejs的变量,代表当前文件目录的绝对路径        
        path: resolve(__dirname, 'build')    
    },    
    module: {        
        rules: [            
            {                
                // 匹配哪些文件                
                test: /\.css$/,                
                // 使用loader进行处理(从右到左,从下到上)                
                use: [                    
                    // 创建style标签,将js中的样式资源插入运行,添加到head中生效                    
                    'style-loader',                     
                    // 将css文件变成commonjs模块加载js中,里面的内容是样式字符串                    
                    'css-loader'                
                ]            
            },            
            {                
                test: /\.less$/,                
                // 使用多个loader用use                
                use: ['style-loader', 'css-loader', 'less-loader']            
            },            
            {                
                test: /\.(jpg|png|gif)$/,                
                // 使用单个loader                
                // 下载两个loader:url-loader、file-loader                
                loader: 'url-loader',                
                options: {                    
                    // 图片小于10kb,就会被base64处理                    
                    // 优点:减少请求                    
                    // 缺点:图片体积变大                    
                    limit: 10 * 1024,                    
                    // 问题:url-loader默认使用es6模块化解析,html-loader引入图片是commonJS                    
                    esModule: false,                    
                    // 给图片重命名                    
                    // [hash:10]取图片hash的前10位                    
                    // [ext]取文件原来的扩展                    
                    name: '[hash:10].[ext]'                
                }            
            },            
            {                
                test: /\.html$/,                
                // 处理html文件的img图片(负责引入img,从而能被url-loader处理)                
                loader: 'html-loader'            
            },            
            {                
                exclude: /\.(html|css|less|js)$/,                
                // 处理其它文件                
                loader: 'file-loader',                
                options: {                    
                    name: '[hash:10].[ext]'                
                }            
            }        
        ]    
    },    
    plugins: [        
        new HtmlWebpackPlugin({            
            template: './src/index.html'        
        })    
    ],    
    mode: 'development'    
    // mode: 'production'
}

    /** 
      * 1、Webpack是一种前端资源构建工具,一个静态模块打包器(module bundler); 
      * 2、在Webpack看来,前端的所有资源文案(js/json/css/less/...)都会作为模块处理; 
      * 3、它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。 
      *
      * Webpack五个核心概念 
      *
      * 1、Entry 
      * 入口(entry)指示Webpack以哪个文件为入口起点开始打包,分析构建内部依赖图; 
      *
      * 2、Output 
      * 输出(output)指示Webpack打包后的资源bundles输出到哪里去,以及如何命名; 
      *
      * 3、Loader 
      * loader让Webpack能够去处理那些非js文件(Webpack自身只理解js); 
      *
      * 4、Plugins 
      * 插件(plugins)可用于执行范围更广的任务。插件的范围包括,从打包优化和压缩一直到重新定义环境中的变量等; 
      *
      * 5、Mode * 模式(mode)指示Webpack使用相应模式的配置。 
      * development:会将process.env.NODE_ENV的值设为development,能让代码本地调试运行的环境; 
      * production:会将process.env.NODE_ENV的值设为production,能让代码优化上线运行的环境; 
    * 
    */