使用此JSFiddle检查控制台,其中显示Chrome中的以下内容:
未捕获的TypeError:handlerHelper(...)不是函数
"use strict"
function parseRoute(route, Handlers){
let parsed = Handlers
route.split('->').forEach(function(s){
parsed.hasOwnProperty(s) && (parsed = parsed[s])
})
return parsed
}
function handlerHelper(Handlers, ev){
let parsed = parseRoute(ev.name, Handlers)
applyHandlers(parsed, ev)
}
function applyHandlers(obj, ev){
for (let i in obj) {
if (obj.hasOwnProperty(i)){
console.log(handlerHelper, typeof handlerHelper)
typeof obj[i] === 'object'
&& handlerHelper(obj[i], ev)
(i = obj.handlers)
&& i.length
&& i.forEach(function(fn){
fn.apply(null, ev)
})
}
}
}
handlerHelper({
$: {
handlers: [function(){}]
}
}, {
name: '$->Test'
})
在控制台上它清楚地说它是功能。 这是一个递归函数,它只在第三次迭代后抛出。 真的很奇怪。关于问题是什么的任何线索?
答案 0 :(得分:5)
缺少分号是问题:
&& handlerHelper(obj[i], ev)
(i = obj.handlers)
这与:
相同 && handlerHelper(obj[i], ev)(i = obj.handlers)
并且handlerHelper
没有返回函数,因此错误。你需要一个分号:
&& handlerHelper(obj[i], ev)
;(i = obj.handlers)