Previous Function如何将其结果传递给回调

时间:2015-04-26 19:21:56

标签: javascript callback

我试图了解回调在这种情况下的工作原理。

例如,鉴于此代码:

var images = jQuery.map((1234567 + '').split(''), function(n) {
  return '<img src="' + n + '.png" />'
})

一个匿名函数作为回调传入,但在每次拆分后,如何'n'神奇地填充?它是如何传递到n参数的?我的意思是我不会认为分裂会将它的价值注入n ......它是否知道这样做呢?

让我们再看一个例子,但这一次,我们 显式地 将param传递给回调函数

function randomGenerator(min, max, callback)
{
   var myNumber = Math.floor(Math.random() * (max - min + 1)) + min;
   setTimeout(function() { callback(myNumber); }, 500);
}

这非常简单,很明显myNumber是如何连接(明确地传递)到callback();

问题是在我的第一个例子中, 隐式地 是如何做到的?我的意思是,我可以假设map()有更多的东西比我知道的更糟糕吗?也许我不得不深入研究jQuery库中Map()的实现...或者是否有一些关于隐式赋值在JS中如何工作的一般常识?

6 个答案:

答案 0 :(得分:3)

这是A函数的作用。 .map()调用只会构建.split()将迭代的数组。

传递给.map()的函数对数组中的每个元素(第一个参数)调用一次。每次调用都有三个参数:数组中元素的值;元素的索引和数组本身。你的匿名函数只有一个参数(这是常见的),因此它将是元素值。

答案 1 :(得分:2)

您已使用带有参数&#34; n&#34;的签名指定了匿名函数。 在内部,map函数调用匿名函数,为参数&#34; n&#34;提供具体对象。如果您删除参数,它将无法正常工作

答案 2 :(得分:0)

为数组中的每个元素调用指定的map函数。字符串只是一个字符数组。

答案 3 :(得分:0)

函数是JavaScript中的任何其他对象。你可以将它们作为参数传递给其他函数,然后另一个函数可以随意做任何事情。

&#13;
&#13;
chart.xAxisMin = function() { return 0; };
chart.yAxisMin = function() { return 0; };
&#13;
&#13;
&#13;

MDN has a polyfill作为function do_something_with_two_numbers(something, num1, num2) { return something(num1, num2); } function add(a,b) { return a + b }; function subtract(a,b) { return a - b }; alert(do_something_with_two_numbers(add, 2, 1)); alert(do_something_with_two_numbers(subtract, 2, 1));的完整示例:

map

答案 4 :(得分:0)

阅读JQuery地图的documentation,特别是它谈论回调的部分。

在JavaScript中,无论如何定义函数,都可以使用任意数量的参数调用函数。所以在jquery.map的定义中,它调用提供的回调n次,其中n是数组中元素的数量,并且在每次调用中传递两个参数,第一个是Object形式的数组元素,第二个是数组中项目的索引,它是一个整数。

如果你只想从零参数函数生成一个长度为n的新数组,那么你的回调在技术上可能只有零参数。

答案 5 :(得分:0)

var images = jQuery.map((1234567 + '').split(''), function(n) {
  return '<img src="' + n + '.png" />'
})

你有这段代码:(1234567 + '')。它会将数字转换为字符串。然后split('')将分割数组项中的所有数字。为每个项调用回调函数,n将获取数组中的每个值。 $.map的本质是保存在原始数组中的项目之上,无论回调将返回什么。 在这种情况下,您将拥有一个看起来像["1","2","3","4","5","6","7"]的数组。运行地图后,您将获得图像数组

images=[
        '<img src="1.png" />',
        '<img src="2.png" />',
        '<img src="3.png" />',
        '<img src="4.png" />',
        '<img src="5.png" />',
        '<img src="6.png" />',
        '<img src="7.png" />'
    ]