现在我有一个变量 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 做的事太多了... |