Tan90Qian
Tan90Qian
`shallow()`just use `wrappingComponent`option in `makeShallowOptions()` but not in `adapter.createRenderer`.So it just use `wrappingComponent` to create `context` param of option but never use `wrappingComponent` to wrap the node. The evidence is...
`ReactSixteenAdapter.createShallowRenderer()` use `react-test-renderer/shallow` to create real component. ```javascript createShallowRenderer(options = {}) { const adapter = this; const renderer = new ShallowRenderer(); ... return { render(el, unmaskedContext, { providerValues = new...
在《你不知道的JavaScript(上卷)》中,提到了一种被作者称为“面向委托”的设计思路,即: ```javascript Foo = { init: function(who) { this.me = who; }, identify: function() { return "I am " + this.me; } }; Bar = Object.create( Foo ); Bar.speak =...
@mqyqingfeng `V8 并没有部署尾递归优化`那就是说,尾递归能否对性能有改进,取决于运行的平台、环境咯?那么是否会存在一些平台反而是常规的递归性能比尾递归更好呢? ```javascript function factorial(n, res) { if (n == 1) return res; return factorial(n - 1, n * res) } function factorial2(n) { if (n == 1) return...
@mqyqingfeng 看到dalao用concat和扩展运算符的时候愣了一下,几乎完全这个方法的印象,甚至还是去查了文档才知道`如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。`这一点的。。。dalao你除了面试、写这些博客时候,日常开发中哪里会用到concat么?我之前半年似乎这个方法连5次都没用到
@thereisnowinter dalao 666~萌新学到了新的一手 apply和bind连用,同时绑定调用的方法和调用的主体,只留下一个参数的位置
@mqyqingfeng 那基本就是在不能使用es6的情况下使用咯?否则“扩展操作符”+数组直接量的创建方式基本可以替代它的功能。然后就是类似数组展平这样,仅靠一个concat或者扩展操作符无法完成的功能。 PS:刚写的内容有2个问题, 1. 因为是用了bind,所以“相当于”下的代码应该都是`return function`而不是直接`function`; 2. 由于第三个函数是从第二个函数应用了apply之后转过去的,所以转化出来的结果应该是将`arg`参数拆开后再传入的结果,也就是借助了`eval`或者`rest操作符`的版本 ```javascript return function(arg) { return [].concat(...arg) } ``` 这也和博主大大在正文中的版本一致。
@mqyqingfeng 第一条是我弄错了。不过第二条,确实是需要展开的,因为MDN对concat方法的描述:`如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组`,因此 ```javascript [].concat([1,[2,[3,4]]]) // [1,[2,[3,4]]] [].concat(...[1,[2,[3,4]]]) // 相当于 [].concat(1,[2,[3,4]]) // [1,2,[3,4]] ```
看了类型判断的下一篇,里面讲到window的时候,大佬用了一段`obj === obj.window`。直接让我惊呆了,js的对象居然还能用`===`来判断的?然后去测试了下,很震惊的发现,诸如`window`、`location`、`history`这样的浏览器相关的对象,Object.prototype.toString.call方法都是单独识别出来。。。这还是头一次发现orz而且它们全都能通过`===`来和自身相等,当然这一点应该是因为内存中这些浏览器相关对象都只有一份。 由此也学到了一个知识点:js中的`===`并非对所有引用类型的数据进行判断时都为false,对于那些接近“单例”形式的对象,是可以和自身全等的。(知识点get)
@mqyqingfeng 对,是因为“自身和自身的引用相同”,但其实这个思路其实在写逻辑判断的时候非常少用吧?正常的情况是,基本不会在对引用类型进行逻辑判断的时候直接对数据本身使用`===`,而是借助于某些特性(比如type、length),所以之前看到那段代码的时候吃了一惊。毕竟window肯定是引用类型的,没想起自身相等这回事(遇到这种场景的次数太少了)。 PS:博主大大有空去看下bind的那一篇,感觉有些问题。