Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用my函数本身并返回';正确的';秩序_Javascript_Function - Fatal编程技术网

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
参数;如果您没有