现有功能"不是功能"

win*_*ter 1 javascript

使用此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)

在控制台上它清楚地说它是功能.这是一个递归函数,它只在第三次迭代后抛出.真的很奇怪.什么问题的线索?

elc*_*nrs 5

缺少分号是问题:

    && 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)