javascript - 短回调函数语法背后的原理
问题描述
这背后的原理是什么?
newArr.some(Array.isArray)
=== newArr.some(elem => Array.isArray(elem))
怎么可能将它们解析为相等?我认为newArr.some(Array.isArray)
=== newArr.some(Array.isArray())
(假设这some
是一个循环并且 JS 假设每个 val 都是 func 的隐含参数),但事实并非如此。所以,我很困惑。请帮我。
这里,有上述案例的2个应用:
function flatMultiArr(arr) {
let newArr = [].concat(...arr);
return newArr.some(Array.isArray)
? flatMultiArr(newArr)
: newArr
}
console.log();//[ 1, {}, 3, 4 ]
function flatMultiArr(arr) {
let newArr = [].concat(...arr);
return newArr.some(elem => Array.isArray(elem))
? flatMultiArr(newArr)
: newArr
}
console.log();//[ 1, {}, 3, 4 ]
注意这个问题不是关于如何展平多维数组。
解决方案
这个原理被称为eta 转换。不,它们不是“被解析为相等”,它们是不同的函数,但它们的行为相同,因此可以进行相同的推理。简化:
const f = Array.isArray
和
function f(x) { return Array.isArray(x); }
调用1时将产生相同的结果,即f([])
or f(5)
。
1:一般来说,方法中的this
绑定和参数的数量有细微的差别,但它适用于Array.isArray
.
推荐阅读
- python - pyqt5如何打开新窗口并重新打开旧窗口
- react-native - react-native run-ios 期间的问题
- javascript - 当属性更改时更新另一个属性?
- c - 为什么编译器会发出问题:警告:赋值从没有强制转换的指针中生成整数
- opengl - 2D 柏林噪声似乎是四四方方的
- c# - log4net 将消息记录到所有 appenderes(/所有文件)
- python - Spotify 在服务器上获取访问令牌 - Spotify API 有那么糟糕吗?
- javascript - 像蜂巢一样用 CSS 堆叠剪辑路径六边形?
- symfony - API 平台:将嵌入的子资源更改为他们的@id
- django - 如何更改我的查询以在 django 中工作?