笑笑十年
笑笑十年
写的很精彩,获益匪浅,感谢。 另外关于 instanceof 的解释: > 对象的__proto__指向自己构造函数的prototype。obj.__proto__.__proto__...的原型链由此产生,包括我们的操作符instanceof正是通过探测obj.__proto__.__proto__... === Constructor.prototype来验证obj是否是Constructor的实例。 有一个例外情况: * 简单类型并不完全准守这个规则,估计ECMA规范里面应该有另外的描述,我用number类型举例,string和boolean类似。 ```javascript var num1 = 100; var num2 = Number(100); var num3 = new Number(100); num1 === num2; // true...
@zxc5800 基本类型当然要遵循原型链规则,不然基本类型上就无法做原型链上的方法调用了啊: ```javascript var num = 100.001; var str = 'hello'; console.log(num.toFixed(2)); // ok console.log(str.substring(3)); // ok ```
Aha, Thanks... 我刚才还在想,如果简单类型也是对象,内存中该如何表达,都放到堆内存,计算起来该多么慢...
```javascript function foo() { var a = 1; let b = 2; } ``` 我的理解: 代码执行分为两个阶段,create phase 和 execute phase,也就是代码解析和代码执行; 在create phase 阶段,其实var 和 let 定义的变量都已经初始化了: var定义的变量被赋值为undefined let定义的变量被赋值为uninitialized var之所以被变量提升是因为已经赋有效值(undefined),但是引用uninitialized变量编译器会报错。 等到execute...
1. 脚本里面的数组不是真正的数组,用的Hash算法,所以读取时间是一致的; 2. 即便真正的数组,读取时间也是一致的,连续内存直接读就好了; 3. 只有对单向链表才有差异;
**hugeorange** 的写法有问题,函数应该允许反复调用,如果在函数上定义timer变量,当我多次调用方法时,timer永远是最后一次的,这会导致之前的定时器不能正确使用clear方法。 我的改写: ```javascript function simuInterval(fn, mills) { let timer = null; (function loop() { timer = setTimeout(() => { loop(); fn(); }, mills); })(); return () => { clearTimeout(timer);...
看到答案瞬间懵逼... 这个东西反常识,写代码单元测试的人直接吐血...
> @labike > 可能是我们对「提升」的理解不同吧?我理解的「提升」和「赋值」是两个过程。 > 我拆解一下那个例子: > > ```js > var Foo = function() { /** pass */ }; > > { > // 「块作用域」内可以访问全局变量 Foo > const foo =...
@afishhhhh 第二个例子作者没写全,这里的Child只继承了Parent类的实例属性和方法,但是没有说父类原型怎么处理,当然如果Parent本身就没有定义原型,这个例子也是没问题的。 ```javascript // 定义父类 function Parent(value) { this.language = ["javascript", "react", "node.js"]; this.value = value; } // 如果Parent也定义了prototype Parent.prototype = { getValue() { return this.value; }, }; // 定义子类...
妈蛋,看了一遍大家的回答,发现我的写法最老派,果然是岁月不饶人... ```javascript function LazyMan(name) { // 防止不通过new来调用 if (!(this instanceof LazyMan)) { return new LazyMan(name); } this.name = name; this.queue = []; console.log(`I'm ${this.name}`); return this.process(); } LazyMan.prototype = {...