前端技能拾遗

本文主要是对本身前端知识遗漏点的总结和概括,但愿对你们有用,会持续更新的~html

解释语言和编译型语言

解释型语言与编译型语言的区别翻译时间的不一样。 编译型语言在程序执行以前,有一个单独的编译过程,将程序翻译成机器语言,之后执行这个程序的时候,就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,因此运行速度相对于编译型语言要慢。 C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。而JS是与编译型语言相似,同样要通过,词法分析,语法分析,AST生成三个步骤。前端

模块

详细解释请参考参考react

commonJS

  1. CommonJS 模块中,若是你 require 了一个模块,那就至关于你执行了该文件的代码并最终获取到模块输出的module.exports 对象的一份拷贝。
  2. CommonJS 模块中 require 引入模块的位置不一样会对输出结果产生影响,而且会生成值的拷贝
  3. CommonJS 模块重复引入的模块并不会重复执行,再次获取模块只会得到以前获取到的模块的拷贝

ES6 输出值的引用

  1. ES6 模块中就再也不是生成输出对象的拷贝,而是动态关联模块中的值。
  2. import 命令会被 JavaScript 引擎静态分析,优先于模块内的其余内容执行。
  3. export 命令会有变量声明提早的效果。

空对象

Object.create(null)的结果和{}很像,可是它不会建立Object.prototype这个委托,因此它要比{}更空。
复制代码

null和undefined的区别

null表示真正的“无”,表明一个空对象指针,即变量未指向任何对象。 Undefined 表示缺省值,即此处应该有一个值可是尚未定义。 在转换为数值类型时,而知区别很大git

Number(undefined)
// NaN

5 + undefined
// NaN

Number(null)
// 0
复制代码

理解js中的构造函数

function MyFunction() {}
var obj1 = new MyFunction()
var obj2 = new MyFunction()
复制代码

其实能够将上面的代码等价为github

funtion MyFunction(){}
var obj1 = {}
MyFunction.call(obj1)
复制代码

js内部先用new操做符建立一个对象,紧接着就将函数的this绑定到这个对象上来执行这个函数。安全

硬绑定bind

参考 不一样: bind 是返回对应函数,便于稍后调用;apply 、call 则是当即调用 。bash

实现

Function.prototype.bind2 = function (context) {

    if (typeof this !== "function") {
      throw new Error("Function.prototype.bind - what is trying to be bound is not callable");
    }

    var self = this;
    var args = Array.prototype.slice.call(arguments, 1);

    var fNOP = function () {};

    var fBound = function () {
        var bindArgs = Array.prototype.slice.call(arguments);
        return self.apply(this instanceof fNOP ? this : context, args.concat(bindArgs));
    }

    fNOP.prototype = this.prototype;
    fBound.prototype = new fNOP();
    return fBound;
}
复制代码

箭头函数

function foo() {
    return (a) => {
        console.log( this.a ); 
    };
}
var obj1 = { a:2 };
var obj2 = { a:3 };
var bar = foo.call( obj1 );
bar.call( obj2 ); // 2, 不是 3 !
复制代码

foo() 内部建立的箭头函数会捕获调用时 foo() 的 this。因为 foo() 的 this 绑定到 obj1, bar(引用箭头函数)的 this 也会绑定到 obj1,箭头函数的绑定没法被修改。(new 也不 行!)react-router

安全

xss(跨站脚本攻击)

其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。 详细内容可参考这里app

csrf(跨站请求伪造)

macrotask和microtask

请参考xss

HTTP

keep-alive

请参考

为何要进行三次握手

详细内容请参考

AJAX

React

react-router实现原理

请参考 请参考2

相关文章
相关标签/搜索