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);
这两种解决方案 感觉都很傻,所以想请问各位前辈有没有更好的办法?
另外,这样写代码是不是有点不好?
------解决方案--------------------
不,第一种解决方案是可以取到argA的值的,因为它是一个闭包的关系