【发布时间】:2012-07-30 10:35:29
【问题描述】:
下面是一个将图片预加载到页面上的函数的源代码,作者添加了一些cmets来解释代码是如何工作的,但是我仍然没有完全理解它。具体来说,他声称这个函数的返回值是一个空对象,带有一个调用预定义匿名函数“postaction()”的“done()”方法。此代码的用户是否应该在第 2 行的空 postaction 函数中输入他/她自己的代码?如果它是这样工作的,那么返回对象中的“postaction=f || postaction”是做什么的?
源代码:
function preloadimages(arr){
var newimages=[], loadedimages=0
var postaction=function(){}
var arr=(typeof arr!="object")? [arr] : arr
function imageloadpost(){
loadedimages++
if (loadedimages==arr.length){
postaction(newimages) //call postaction and pass in newimages array as parameter
}
}
for (var i=0; i<arr.length; i++){
newimages[i]=new Image()
newimages[i].src=arr[i]
newimages[i].onload=function(){
imageloadpost()
}
newimages[i].onerror=function(){
imageloadpost()
}
}
return { //return blank object with done() method
done:function(f){
postaction=f || postaction
//remember user defined callback functions to be called when images load
}
}
}
作者页面链接:http://www.javascriptkit.com/javatutors/preloadimagesplus.shtml
【问题讨论】:
-
如果对象为空,则不会包含 done 方法。
-
在作者的页面上,他将其称为空对象
-
看起来他错误地使用了“空白对象”一词来表示object literal。
-
另外,一个函数调用 postaction不能是一个匿名函数,你(或外部)的意思可能是一个惰性或空函数:调用它不会做除了隐式返回
undefined
标签: javascript object callback return anonymous-function