在我的一个网站功能( myFunction )中,我需要将四个变量传递给另一个函数(具有通用格式的Ajax函数 - function GeneralFunction (' id1',' id2',param1,param2,param3))。
此时,我需要保留这种通用格式,但 myFunction 有太多参数要传递给 GeneralFunction 。所以我连接如下:
function myFunction(a, b, c, d) {
//Lots of code then
var param3 = c + "," + d;
GeneralFunction('id1', 'id2', a, b, param3);
}
然后我爆炸param3并处理php文件中的c和d,其中 GeneralFunction 传递param3 ....这很好。
但是,我的问题如下......以下代码是否始终可以接受?我以为我会通过重写 myFunction 来节省一步:
function myFunction(a, b, c, d) {
//Lots of code then
GeneralFunction('id1', 'id2', a, b, c + "," + d);
}
c和d在传递给 GeneralFunction 时连接在一起。虽然这按预期工作,但我使用的在线lint js检查器(http://www.javascriptlint.com/online_lint.php)没有检测到任何错误,连接(或执行任何类型的操作,算术,连接等)并传递参数 - 同时 - 一个普遍接受的协议?
我在谷歌搜索中找不到多少,只是因为它在我看来不起作用意味着它总能运作!
答案 0 :(得分:2)
执行任何类型的操作(算术,连接等)并同时传递参数 - 一个普遍接受的协议?
是的,完全可以接受。实际上很少有普通变量传递给函数,通常参数由任意表达式组成。注意它们不会“同时”发生,但参数从左到右进行评估,然后将它们的结果值传递给函数。
答案 1 :(得分:1)
<html>
<head>
<title></title>
</head>
<script>
function fun1(a,b,c,d)
{
alert(a+" "+b+" "+c+" "+d);
var demo=c+","+d;
fun2(a,b,demo);
}
function fun2(a,b,d)
{
alert(a+" "+b+" "+d);
}
</script>
<body>
<a href="javascript:void(0)" onclick="fun1(1,2,3,4)">Call</a>
</body>
</html>
如果&#34;,&#34; (逗号)不能连接使用#或其他符号。
答案 2 :(得分:0)
老实说,这不是很明智。代码本身不仅看起来不卫生,而且还会丢失额外参数的类型信息。例如,考虑c
和d
分别是bool
和number
:
var c = true,
d = 3;
var combined = c + ',' + d; // "true,3"
combined.split(','); // ["true", "3"]
请注意,您现在有两个字符串("true"
和"3"
),而不是您的初始值。
还有其他问题。例如,如果c
或d
是包含逗号的字符串,则最终会在另一方面产生意外结果:
var c = 'hello,world',
d = 'foo,bar';
var combined = c + ',' + d; // "hello,world,foo,bar"
combined.split(','); // ["hello", "world", "foo", "bar"]
此时,无法确定哪些“部分”最初来自c
与d
。所以现在你必须为逗号介绍一些转义...哎呀。
理想的解决方案是简单地更改严格的4参数要求。但是,如果无法做到这一点,我建议在数组中传递额外的变量:
function myFunction(a, b, c, d) {
//Lots of code then
GeneralFunction('id1', 'id2', a, b, [c, d]);
}
使用这种方法,您不会丢失类型信息,并且在另一侧检索值会更容易。