我尝试的demo如下:
<script type="text/javascript"> function execMethod() { $.each(arguments, function (i, n) { n(); }); } function a() { alert('a'); } function b() { alert('b'); } function n(x) { alert(x); } function e() { execMethod(a, b, n(7)); } </script>
在上边的代码中,不带参数的函数a,b能正常运行.
而带参的函数n,传参数 execMethod(a,b,n(7))时直接被立即调用,
我的理解应该是加了()的函数就立即调用了.
而each中,a,b是能得到方法体的,所以能正常执行.
而n(7)却提示函数未定义,的确没有声明 function n(7)(){....}这样的函数.
那么..如果想将带参数的函数传递进去,被动态调用,应该如何写呢?
谢谢指导.
function execMethod() { $.each(arguments, function (i, n) { n.fn.call(this, n.args); }); } function a() { alert('a'); } function b() { alert('b'); } function n(x) { alert(x); } function e() { execMethod({fn: a}, {fn: b}, {fn: n, args: 7}); } e();
不能写在传入参数那个地方,这样的话js会首先把n执行了再释放了,随后再进入execMethod找到n的时候,n就是undefined。不知道这样lz可以接受不:
!function () {
function execMethod() {
$.each(arguments, function (i, n) {
if (i === 2) {
n(7);
}
else {
n();
}
});
}
function a() {
alert('a');
}
function b() {
alert('b');
}
function n(x) {
alert(x);
}
function e() {
execMethod(a, b, n);
}
e();
}();
<script type="text/javascript">
!function () {
function execMethod(a,b,n,f) {
$.each(arguments, function (i, n) {
n(f);
});
}
function a() {
alert('a');
}
function b() {
alert('b');
}
function n(x) {
alert(x);
}
function e() {
var f = 7;
execMethod(a, b, n, f);
}
e();
}();
</script>
后面想了下,这样写更好些
function e() { execMethod(a, b, function(){ n(7); }); }
改成这样应该就可以了