遇到以下不同之处:
例1
var s = [];
var anArray = [1,2,3];
var iterateeFunction = function(n){
s.push(n);
}
_( anArray ).forEach( iterateeFunction )
的输出:的的
示例2
_.first([1, 2, 3], 2);
输出:
不确定这是不是真的不兼容! @ John-David Dalton:请告知:有什么需要改变这个?兼容性问题仅适用于此!我不认为这是一个充分的原因。
这可能是使用lodash的错误方式,但在旧版本上它无论如何都有效。 我想可能会有更多这样的例子。所以我的问题是
我非常喜欢v3.10.1,我很乐意升级!
答案 0 :(得分:1)
这种差异与new lazy sequences added in version 3。
有关结果是用于副作用的each/forEach
处理导致了很多混乱,并且" bug"报告 - 请参阅"Lazy each should cause immediate evaluation","Each doesn't execute callbacks when wrapped"等
对延迟序列处理的更改可能会破坏期望立即执行的任何序列操作回调 (即。执行副作用),否则不会立即强迫或实现。问题最常见于each/forEach
用法 - 传递顺序通常被忽略 - 但它也可能出现在其他意外延迟的情况下。执行。
要使v3代码像以前一样,强制或"展开" value的序列。
_( anArray ).forEach( iterateeFunction ).value()
// ^-- creates lazy sequence
// ^-- so this doesn't "run" the callback
// ^-- until unwrapped
或者,更好的是,使用非包装形式:
_( anArray, iterateeFunction )
或更好的是,与ES5兼容的功能(数组作为对象):
anArray.forEach(iterateFunction)