本文主要是对本身前端知识遗漏点的总结和概括,但愿对你们有用,会持续更新的~html
解释型语言与编译型语言的区别翻译时间的不一样。 编译型语言在程序执行以前,有一个单独的编译过程,将程序翻译成机器语言,之后执行这个程序的时候,就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,因此运行速度相对于编译型语言要慢。 C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。而JS是与编译型语言相似,同样要通过,词法分析,语法分析,AST生成三个步骤。前端
详细解释请参考参考react
Object.create(null)的结果和{}很像,可是它不会建立Object.prototype这个委托,因此它要比{}更空。
复制代码
null表示真正的“无”,表明一个空对象指针,即变量未指向任何对象。 Undefined 表示缺省值,即此处应该有一个值可是尚未定义。 在转换为数值类型时,而知区别很大git
Number(undefined)
// NaN
5 + undefined
// NaN
Number(null)
// 0
复制代码
function MyFunction() {}
var obj1 = new MyFunction()
var obj2 = new MyFunction()
复制代码
其实能够将上面的代码等价为github
funtion MyFunction(){}
var obj1 = {}
MyFunction.call(obj1)
复制代码
js内部先用new操做符建立一个对象,紧接着就将函数的this绑定到这个对象上来执行这个函数。安全
参考 不一样: 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漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。 详细内容可参考这里app
请参考xss