使用此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'
})
Run Code Online (Sandbox Code Playgroud)
在控制台上它清楚地说它是功能.这是一个递归函数,它只在第三次迭代后抛出.真的很奇怪.什么问题的线索?
缺少分号是问题:
&& handlerHelper(obj[i], ev)
(i = obj.handlers)
Run Code Online (Sandbox Code Playgroud)
这与:
&& handlerHelper(obj[i], ev)(i = obj.handlers)
Run Code Online (Sandbox Code Playgroud)
并且handlerHelper不返回函数,因此错误.那里你需要一个分号:
&& handlerHelper(obj[i], ev)
;(i = obj.handlers)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |