
现在我有一个变量 flag,由这个变量来决定最终会得到哪个函数,目前我是这样写的:
var flag = false; // 我需的要函数 var myFn = createFn(flag); function createFn(flag){ var partFn; if(flag){ partFn = function(){ //第一种情况... } }else{ partFn = function(){ //第二种情况... } } return function(){ //... setTimeout(partFn, 0); //... } } 我感觉这种写法不太好,是否有可以改进的地方?
1 ykjsw 2016-03-22 18:51:54 +08:00 via iPad 直接 retuen funtion(){...} |
2 xpol 2016-03-22 23:05:11 +08:00 用 return 连 else 都可以省了。 |
3 neoblackcap 2016-03-22 23:36:09 +08:00 再改的话,就是用动态特性,比如拼函数名什么的来确定具体要调用的函数。 |
4 Mirana 2016-03-23 00:33:46 +08:00 var fn1 = function(){}; var fn2 = function(){}; var myFn = flag?fn1:fn2; |
6 morethansean 2016-03-23 10:13:36 +08:00 同楼上,直接 return partFn ,没明白加了一堆其他的还有 setTimeout 是干嘛…… |
7 Biwood OP @morethansean 因为 partFn 里面引用了外层代码里面的变量,我需要的函数也不是 partFn ,它只是我的函数中的一个子函数而已 |
8 zyguan 2016-03-23 15:01:42 +08:00 @Biwood 本来我是没太明白你的需求的,也不怎么用 Javascript ,但看了回复反而好奇了... partFn 如何引用了外层代码的变量了?外层代码是指 return function() {... 里注释的那些? 就我所知, Javascript 的词法作用域是和函数表达式所在位置相关, return function() {... 中通过 setTimeout 调用 partFn 没法引用外层代码的吧!?如果你是指更外层,也就是 createFn 中的变量,那像楼上诸位说的直接返回也是没关系的吧。 最后,我想说的是,其实函数也是可以作为函数参数传入的,或者说,你的 createFn 做的事太多了... |