onfoucs和onblur等事件不支持__proto__ 是每个实例上都有的属性,prototype 是构造函数的属性,这两个并不一样,但 __proto__ 和 prototype 指向同一个对象 🔔: jquery,zepto的插件机制就是放方法放在他们的原型上($.fn)

箭头函数是普通函数更优雅的简写,和普通函数的区别是:
this对象是函数定义式所在作用域的对象,而不是执行是的对象arguments对象,在浏览器环境下输入arugments会报错,new命令,因为new的实现open in new window: this,所以无法调用call,applyprototype指向新对象的_proto_new时无法调用的,会报错Sub.__proto__ === Super.prototype;es6:Sub.__proto__ === Super,在babel对es6对转换let Sub = Object.create(Super)base64,体积会增加大概1/3?引用计数法的算法 标记清除算法 新生代和老生代; 新生代即存活时间较短的对象,使用副垃圾回收器,老生代即存活时间较长或者占用空间较大的对象(25%),使用主垃圾回收器新生代用Scavenge算法,即采用复制的方式实现的垃圾回收算法;当一个对象通过多次复制或生命周期较长或to空间不足时则会被分配到老生代中老生代应用标记清除的方式进行垃圾回收 标记-整理增量标记算法,及将任务分成多个小人物,穿插进js中去执行define(['dep'], function(dep) {
// your_export;
});
define(function(require, exports, module) {
const dep= require('dep');
exports.your_export = /* your_export */;
})
| # | I/O | setTimeout | setInterval | setImmediate | requestAnimationFrame | UI Rendering |
|---|---|---|---|---|---|---|
| 浏览器 | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
| node | ✅ | ✅ | ✅ | ✅ | ⬜ | ⬜ |
| # | process.nextTick | MutationObserver | promise |
|---|---|---|---|
| 浏览器 | ⬜ | ✅ | ✅ |
| node | ✅ | ⬜ | ✅ |
问题的本身就是promise的回掉什么时候执行;
阻塞,造成cpu利用率低;任务队列非常长;则会造成回掉迟迟无法执行;导致应用卡顿;cpu浪费和回掉函数执行的实时性满足以下调教的函数:
memoize简单讲就是将计算结果缓存起来;对于需要大量的计算和递归操作来说,可以加快速度;比如:阶乘、斐波那契数组
const a = {}
const b = { key: 'b' }
const c = { key: 'c' }
a[b] = 123
a[c] = 456
console.log(a[b])
答案: 456
原因:对象的键被自动转换为字符串,然而,当字符串化一个对象时,它会变成 "[Object object]"。因此这里说的是,a["Object object"] = 123。然后,c 是另外一个对象,这里也有隐式字符串化,于是,a["Object object"] = 456。, 所以最后输出结果就是456
<div onclick="console.log('div')">
<p onclick="console.log('p')">
Click here!
</p>
</div>
答案: p,div
原因:在事件传播期间,有三个阶段:捕获、目标和冒泡。默认情况下,事件处理程序在冒泡阶段执行(除非将 useCapture 设置为 true)。它从嵌套最深的元素向外传播
答案: []
原因:比较规则如下:
[] == false判断);步骤(内置的[ToPrimitive]函数) valueOf(),如果是原始值则进行比较toString(),如果是原始值则进行比较TypeError异常var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 2,
show: function(fn) {
this.length = 3;
fn();
// arguments.number = 1000
arguments[0]();
}
};
obj.show(fn);
答案: 10、1
原因: 可以将arguments[0]()看成arguments.0();所以这里的this其实是函数的参数,也就是 arguments的个数;
function foo() {
getName = function() {console.log(1);}
return this
}
foo.getName = function(){console.log(2);}
foo.prototype.getName = function(){console.log(3);}
var getName = function(){console.log(4);}
function getName() {
console.log(5);
}
foo.getName()
getName()
foo().getName()
getName()
new foo.getName()
new foo().getName()
new new foo().getName()
答案: 2,4,1,1,2,3,3
原因:无
小红包免费领
小礼物走一走
onfoucs和onblur等事件不支持__proto__ 是每个实例上都有的属性,prototype 是构造函数的属性,这两个并不一样,但 __proto__ 和 prototype 指向同一个对象 🔔: jquery,zepto的插件机制就是放方法放在他们的原型上($.fn)

箭头函数是普通函数更优雅的简写,和普通函数的区别是:
this对象是函数定义式所在作用域的对象,而不是执行是的对象arguments对象,在浏览器环境下输入arugments会报错,new命令,因为new的实现open in new window: this,所以无法调用call,applyprototype指向新对象的_proto_new时无法调用的,会报错Sub.__proto__ === Super.prototype;es6:Sub.__proto__ === Super,在babel对es6对转换let Sub = Object.create(Super)base64,体积会增加大概1/3?引用计数法的算法 标记清除算法 新生代和老生代; 新生代即存活时间较短的对象,使用副垃圾回收器,老生代即存活时间较长或者占用空间较大的对象(25%),使用主垃圾回收器新生代用Scavenge算法,即采用复制的方式实现的垃圾回收算法;当一个对象通过多次复制或生命周期较长或to空间不足时则会被分配到老生代中老生代应用标记清除的方式进行垃圾回收 标记-整理增量标记算法,及将任务分成多个小人物,穿插进js中去执行define(['dep'], function(dep) {
// your_export;
});
define(function(require, exports, module) {
const dep= require('dep');
exports.your_export = /* your_export */;
})
| # | I/O | setTimeout | setInterval | setImmediate | requestAnimationFrame | UI Rendering |
|---|---|---|---|---|---|---|
| 浏览器 | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
| node | ✅ | ✅ | ✅ | ✅ | ⬜ | ⬜ |
| # | process.nextTick | MutationObserver | promise |
|---|---|---|---|
| 浏览器 | ⬜ | ✅ | ✅ |
| node | ✅ | ⬜ | ✅ |
问题的本身就是promise的回掉什么时候执行;
阻塞,造成cpu利用率低;任务队列非常长;则会造成回掉迟迟无法执行;导致应用卡顿;cpu浪费和回掉函数执行的实时性满足以下调教的函数:
memoize简单讲就是将计算结果缓存起来;对于需要大量的计算和递归操作来说,可以加快速度;比如:阶乘、斐波那契数组
const a = {}
const b = { key: 'b' }
const c = { key: 'c' }
a[b] = 123
a[c] = 456
console.log(a[b])
答案: 456
原因:对象的键被自动转换为字符串,然而,当字符串化一个对象时,它会变成 "[Object object]"。因此这里说的是,a["Object object"] = 123。然后,c 是另外一个对象,这里也有隐式字符串化,于是,a["Object object"] = 456。, 所以最后输出结果就是456
<div onclick="console.log('div')">
<p onclick="console.log('p')">
Click here!
</p>
</div>
答案: p,div
原因:在事件传播期间,有三个阶段:捕获、目标和冒泡。默认情况下,事件处理程序在冒泡阶段执行(除非将 useCapture 设置为 true)。它从嵌套最深的元素向外传播
答案: []
原因:比较规则如下:
[] == false判断);步骤(内置的[ToPrimitive]函数) valueOf(),如果是原始值则进行比较toString(),如果是原始值则进行比较TypeError异常var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 2,
show: function(fn) {
this.length = 3;
fn();
// arguments.number = 1000
arguments[0]();
}
};
obj.show(fn);
答案: 10、1
原因: 可以将arguments[0]()看成arguments.0();所以这里的this其实是函数的参数,也就是 arguments的个数;
function foo() {
getName = function() {console.log(1);}
return this
}
foo.getName = function(){console.log(2);}
foo.prototype.getName = function(){console.log(3);}
var getName = function(){console.log(4);}
function getName() {
console.log(5);
}
foo.getName()
getName()
foo().getName()
getName()
new foo.getName()
new foo().getName()
new new foo().getName()
答案: 2,4,1,1,2,3,3
原因:无
小红包免费领
小礼物走一走