日期:2014-05-16  浏览次数:20420 次

js:代参函数A作为参数传递时,A参数怎么办
事情的发展是这样的:
一开始有如下代码:

function b(argB){
var argA = ……;
if(type && type.length > 0){
a(argA );
}
}
function a(argA){
alert("dosomething");
}
b("11");

简单来说就是调用b,对b的参数进行校验后调用A,后来发现类似与b的函数太多了,校验规则也差不多,于是想把校验单独作为一个函数,于是有了如下代码:

function b(argB){
var argA = ……;
argCheck(arguments, a(argA));

}
function a(argA){
alert("dosomething");
}


function argCheck(args, func){
var pass = true;
for(var arg in args){
if(!(arg && arg.length > 0)){
alert("false");
pass = false;
return false;
}
}
func();
}
b("11");

这段代码本身就有问题毋庸置疑。问题的重点在于我是" a(argA)"这样传递参数的,所以在argCheck里面的代码执行之前a就已经执行了。
现在有两种解决方案,分别是:

//调用argCheck时改为
argCheck(arguments, function(){a(argA)});


argCheck(arguments, a, argA);

这两种解决方案 感觉都很傻,所以想请问各位前辈有没有更好的办法?
另外,这样写代码是不是有点不好?
------解决方案--------------------
引用:
Quote: 引用:

不是异步验证,没必要用回调函数,
这样就行了:
function b(argB){
    var argA = ……;
    if(argCheck(arguments)) a(argA);
}


谢谢前辈,异步验证还不是很了解,目前还没太接触过,有什么好书可以参考么?

另外,假如是异步验证的话,我发现所谓的第一种解决方案:
argCheck(arguments, function(){a(argA)});

是无法取到argA的值的,看上去是因为不再一条链上。这种情况下有没有什么办法可以把argA传入么,异步验证是如何做的?


不,第一种解决方案是可以取到argA的值的,因为它是一个闭包的关系