在我的地图功能中观察奇怪的行为:
let tpl = ({x}, y = `This is ${x}`) => y;
console.log( tpl({x:5}) ); //correctly returns 'This is 5'
console.log( [{x:1}, {x:9}].map(tpl) ); //expecting array of strings, instead get [0, 1]
可以通过省略默认变量y
并直接从tpl返回模板字符串来“修复”此问题。但是,我更倾向于以这种方式进行初始化,并且无法理解为什么它仍然无法正常工作。
对我来说,这似乎是一种奇怪的异常现象,是否有人对我失踪的事物有所了解?
答案 0 :(得分:3)
您的 tpl 函数由JavaScript的map Array方法提供(value, index, array)
。您已将y
设为默认值This is ${x}
。但是当您将tpl
作为回调传递给map
时,y
未定义,因此未使用默认值。 map
正在将索引传递给您的y
参数。
let tpl = ({x}, y = `This is ${x}`) => y
const arr = [ {x:1}, {x:9} ];
arr.map(tpl) // [0, 1]
arr.map((value, index, array) => tpl(value)) // [ 'This is 1', 'This is 9' ]