我试图了解回调在这种情况下的工作原理。
例如,鉴于此代码:
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中如何工作的一般常识?
答案 0 :(得分:3)
这是A
函数的作用。 .map()
调用只会构建.split()
将迭代的数组。
传递给.map()
的函数对数组中的每个元素(第一个参数)调用一次。每次调用都有三个参数:数组中元素的值;元素的索引和数组本身。你的匿名函数只有一个参数(这是常见的),因此它将是元素值。
答案 1 :(得分:2)
您已使用带有参数&#34; n&#34;的签名指定了匿名函数。 在内部,map函数调用匿名函数,为参数&#34; n&#34;提供具体对象。如果您删除参数,它将无法正常工作
答案 2 :(得分:0)
为数组中的每个元素调用指定的map函数。字符串只是一个字符数组。
答案 3 :(得分:0)
函数是JavaScript中的任何其他对象。你可以将它们作为参数传递给其他函数,然后另一个函数可以随意做任何事情。
chart.xAxisMin = function() { return 0; };
chart.yAxisMin = function() { return 0; };
&#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" />'
]