现有功能"不是功能"

时间:2016-01-30 18:10:45

标签: 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'
})

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

1 个答案:

答案 0 :(得分:5)

缺少分号是问题:

    && handlerHelper(obj[i], ev)

  (i = obj.handlers)

这与:

相同
    && handlerHelper(obj[i], ev)(i = obj.handlers)

并且handlerHelper没有返回函数,因此错误。你需要一个分号:

    && handlerHelper(obj[i], ev)

  ;(i = obj.handlers)