请教,这是什么写法?好像和菜鸟教程上的闭包有一点区别,哪里有详细的说明?

winzond 2019-06-17 06:56:15

function condition(test){
  return({
        cat :function(){console.log('cat');},
        dog :function(){console.log('dog');},
        zhiqiang : function(){console.log('zhiqiang');}
     }[test] || function(){console.log('我是默认值');}
  )();
}
如题,谢谢
...全文
211 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
追热 2019-06-18
  • 打赏
  • 举报
回复
这好像是函数式编程的风格
天际的海浪 2019-06-18
  • 打赏
  • 举报
回复
引用 6 楼 追热 的回复:
这好像是函数式编程的风格
引用 5 楼 winzond 的回复:
引用 4 楼 天际的海浪 的回复:
明明用一个switch搞定,非要这么复杂
我也觉得复杂,可是看到一些网友的文章,说switch不好用,说写成对象的方式多么多么的好。我觉得唯一的好处,可能是对于条件的判断上,switch会一个一个去判断,可能速度会慢一些,而对象不会一个一个判断,速度会快一些,仅此而已吧。
在有些情况下用对象的方式确实是比switch简洁,但楼主你这个代码却是个反例。
winzond 2019-06-17
  • 打赏
  • 举报
回复
引用 4 楼 天际的海浪 的回复:
明明用一个switch搞定,非要这么复杂
我也觉得复杂,可是看到一些网友的文章,说switch不好用,说写成对象的方式多么多么的好。我觉得唯一的好处,可能是对于条件的判断上,switch会一个一个去判断,可能速度会慢一些,而对象不会一个一个判断,速度会快一些,仅此而已吧。
天际的海浪 2019-06-17
  • 打赏
  • 举报
回复
明明用一个switch搞定,非要这么复杂
winzond 2019-06-17
  • 打赏
  • 举报
回复
不对(obj[key])始终是个函数,(fun)()自己调用自己
winzond 2019-06-17
  • 打赏
  • 举报
回复
好像发表后,看明白了一些东西:
{
cat :function(){console.log('cat');},
 dog :function(){console.log('dog');},
 zhiqiang : function(){console.log('zhiqiang');}
}
是一个对象,对象后跟方括号是返回属性名test的值,如果属性名不存在,则执行默认函数,(obj)()表示对象自己调用自己。
发表之前已经看了老半天了,刚刚才开窍,这高手写的东西,是很精简及费解。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧