Javascript 使用my函数本身并返回';正确的';秩序
我有这个功能Javascript 使用my函数本身并返回';正确的';秩序,javascript,function,Javascript,Function,我有这个功能 var foo = function(){ var args = Array.prototype.slice.call(arguments, 0); for (var i = 0; i < args.length; i++) { console.log(args[i]); } }; 这是结果 但我希望它的用法是这样工作,并得到相同的结果 foo(1, 2, foo(3, 4, 5), 6, 7, 8); foo(1, 2, foo(3, 4, 5)
var foo = function(){
var args = Array.prototype.slice.call(arguments, 0);
for (var i = 0; i < args.length; i++) {
console.log(args[i]);
}
};
这是结果
但我希望它的用法是这样工作,并得到相同的结果
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
然而,结果却是这样的
提前谢谢
马赫
但我希望它的用法是这样工作,并得到相同的结果
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
你不能。这条线相当于:
var tmp = foo(3, 4, 5);
foo(1, 2, tmp, 6, 7, 8);
也就是说,首先运行foo(3,4,5)
位,然后运行foo(1,2,mumble,6,7,8)
位
你可以玩一些游戏来推迟执行,但它们往往非常具体地取决于你实际在做什么(我认为这不仅仅是按顺序输出数字)
例如,您可以在这里玩一个游戏,让foo
检测其参数是否为函数,如果是,则调用它们;然后,您可以使用(或类似)创建函数,这些函数在调用时将具有所需的参数。看起来是这样的:
var foo = function(){
var args = Array.prototype.slice.call(arguments, 0);
var arg;
for (var i = 0; i < args.length; i++) {
arg = args[i];
if (typeof arg === "function") {
arg();
} else {
console.log(arg);
}
}
};
foo(1, 2, foo.bind(undefined, 3, 4, 5), 6, 7, 8);
()
这是因为Function#bind
不调用该函数,它创建了一个新函数,当调用该函数时,将使用您提供的参数bind
(第一个参数是调用期间此将是什么;如果您没有任何特定的参数,请使用未定义
或空
)。因此,在执行此操作时:
foo(1, 2, foo.bind(undefined, 3, 4, 5), 6, 7, 8);
…我们正在这样做:
var tmpFunction = foo.bind(undefined, 3, 4, 5);
foo(1, 2, tmpFunction, 6, 7, 8);
(Function#bind
是除IE8之外的所有现代浏览器中的ES5功能(IE8虽然不“现代”,但仍在大量使用),但可以使用ES5 shim或类似工具正确地“填充”。)
(琐事:你创建一个函数,其中的一些参数“烘焙”到函数中,称为函数,以数学家的名字命名。[是的,这就是编程语言Haskell的名字。])
但我希望它的用法是这样工作,并得到相同的结果
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
你不能。那一行相当于:
var tmp = foo(3, 4, 5);
foo(1, 2, tmp, 6, 7, 8);
也就是说,首先运行foo(3,4,5)
位,然后运行foo(1,2,mumble,6,7,8)
位
你可以玩一些游戏来推迟执行,但它们往往非常具体地取决于你实际在做什么(我认为这不仅仅是按顺序输出数字)
例如,您可以在这里玩一个游戏,让foo
检测其参数是否为函数,如果是,则调用它们;然后您可以使用(或类似)创建函数,在调用时,这些函数将具有您想要的参数。如下所示:
var foo = function(){
var args = Array.prototype.slice.call(arguments, 0);
var arg;
for (var i = 0; i < args.length; i++) {
arg = args[i];
if (typeof arg === "function") {
arg();
} else {
console.log(arg);
}
}
};
foo(1, 2, foo.bind(undefined, 3, 4, 5), 6, 7, 8);
()
这是因为Function#bind
不调用该函数,它创建了一个新函数,当调用该函数时,将使用您提供的参数bind
(第一个参数是调用期间此将是什么;如果您没有任何特定的参数,请使用未定义
或空
)。因此,在执行此操作时:
foo(1, 2, foo.bind(undefined, 3, 4, 5), 6, 7, 8);
…我们正在这样做:
var tmpFunction = foo.bind(undefined, 3, 4, 5);
foo(1, 2, tmpFunction, 6, 7, 8);
(Function#bind
是除IE8之外的所有现代浏览器中的ES5功能(IE8虽然不“现代”,但仍在大量使用),但可以使用ES5 shim或类似工具正确地“填充”。)
(琐事:你创建一个函数,其中的一些参数“烘焙”到函数中,称为函数,以数学家的名字命名。[是的,这就是编程语言Haskell的名字。])
但我希望它的用法是这样工作,并得到相同的结果
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
你不能。那一行相当于:
var tmp = foo(3, 4, 5);
foo(1, 2, tmp, 6, 7, 8);
也就是说,首先运行foo(3,4,5)
位,然后运行foo(1,2,mumble,6,7,8)
位
你可以玩一些游戏来推迟执行,但它们往往非常具体地取决于你实际在做什么(我认为这不仅仅是按顺序输出数字)
例如,您可以在这里玩一个游戏,让foo
检测其参数是否为函数,如果是,则调用它们;然后您可以使用(或类似)创建函数,在调用时,这些函数将具有您想要的参数。如下所示:
var foo = function(){
var args = Array.prototype.slice.call(arguments, 0);
var arg;
for (var i = 0; i < args.length; i++) {
arg = args[i];
if (typeof arg === "function") {
arg();
} else {
console.log(arg);
}
}
};
foo(1, 2, foo.bind(undefined, 3, 4, 5), 6, 7, 8);
()
这是因为Function#bind
不调用该函数,它创建了一个新函数,当调用该函数时,将使用您提供的参数bind
(第一个参数是调用期间此将是什么;如果您没有任何特定的参数,请使用未定义
或空
)。因此,在执行此操作时:
foo(1, 2, foo.bind(undefined, 3, 4, 5), 6, 7, 8);
…我们正在这样做:
var tmpFunction = foo.bind(undefined, 3, 4, 5);
foo(1, 2, tmpFunction, 6, 7, 8);
(Function#bind
是除IE8之外的所有现代浏览器中的ES5功能(IE8虽然不“现代”,但仍在大量使用),但可以使用ES5 shim或类似工具正确地“填充”。)
(琐事:你创建一个函数,其中的一些参数“烘焙”到函数中,称为函数,以数学家的名字命名。[是的,这就是编程语言Haskell的名字。])
但我希望它的用法是这样工作,并得到相同的结果
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
foo(1, 2, foo(3, 4, 5), 6, 7, 8);
你不能。那一行相当于:
var tmp = foo(3, 4, 5);
foo(1, 2, tmp, 6, 7, 8);
也就是说,首先运行foo(3,4,5)
位,然后运行foo(1,2,mumble,6,7,8)
位
你可以玩一些游戏来推迟执行,但它们往往非常具体地取决于你实际在做什么(我认为这不仅仅是按顺序输出数字)
例如,您可以在这里玩一个游戏,让foo
检测其参数是否为函数,如果是,则调用它们;然后您可以使用(或类似)创建函数,在调用时,这些函数将具有您想要的参数。如下所示:
var foo = function(){
var args = Array.prototype.slice.call(arguments, 0);
var arg;
for (var i = 0; i < args.length; i++) {
arg = args[i];
if (typeof arg === "function") {
arg();
} else {
console.log(arg);
}
}
};
foo(1, 2, foo.bind(undefined, 3, 4, 5), 6, 7, 8);
()
这是因为Function#bind
不调用该函数,它创建了一个新函数,当调用该函数时,将使用您提供的bind
参数调用该函数(第一个参数是调用过程中的this
参数;如果您没有