javascript中的匿名函数和空返回对象

javascript中的匿名函数和空返回对象,javascript,object,callback,return,anonymous-function,Javascript,Object,Callback,Return,Anonymous Function,下面是一个将图像预加载到页面上的函数的源代码,作者添加了一些注释来解释代码是如何工作的,但我仍然不完全理解它的全部内容。具体来说,他声称该函数的返回值是一个空对象,带有一个“done()”方法,该方法调用预定义的匿名函数“postaction()”。此代码的用户是否应该在第2行的空邮递功能中输入自己的代码?如果它是这样工作的,那么返回对象中的“postaction=f | | postaction”做什么呢 源代码: function preloadimages(arr){ var newi

下面是一个将图像预加载到页面上的函数的源代码,作者添加了一些注释来解释代码是如何工作的,但我仍然不完全理解它的全部内容。具体来说,他声称该函数的返回值是一个空对象,带有一个“done()”方法,该方法调用预定义的匿名函数“postaction()”。此代码的用户是否应该在第2行的空邮递功能中输入自己的代码?如果它是这样工作的,那么返回对象中的“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
    }
  }
}
函数预加载图像(arr){
var newimages=[],loadeImage=0
var postaction=function(){}
var arr=(typeof arr!=“object”)?[arr]:arr
函数imageloadpost(){
加载图像++
如果(LoadeImage==arr.length){
postaction(newimages)//调用postaction并作为参数传入newimages数组
}
}

对于(var i=0;i,您可以为postaction输入自己的函数,尽管它不是您可能期望的回调函数

但是,它返回一个包含done函数的对象

如果你这样做,就像

 preloadimages().done(function () {
     console.log('done')
 });

您的函数将被执行。如果您不将fnction作为done的参数提供,则将调用默认的postaction而不执行任何操作,因为它是一个空函数

您可以为postaction输入自己的函数,尽管它不是您可能期望的回调函数

但是,它返回一个包含done函数的对象

如果你这样做,就像

 preloadimages().done(function () {
     console.log('done')
 });

您的函数将被执行。如果您不将fnction作为done的参数提供,则将调用默认的postaction,而不执行任何操作,因为读取该代码时它是一个空函数,看起来您不打算重新定义
postaction()
-事实上,您根本不需要修改任何代码。实际上,您需要将函数作为参数传递给
done()
函数,该函数将在成功加载图像后调用(“回调”函数)

这一行:

postaction=f || postaction

表示“如果f有值,则将f的值分配给postaction,否则将postaction分配给它本身”(即,不要更改它)。

从阅读该代码来看,您似乎不打算重新定义
postaction()
-事实上,您根本不需要修改任何代码。实际上,您需要将函数作为参数传递给
done()
函数,该函数将在成功加载图像后调用(“回调”函数)

这一行:

postaction=f || postaction

表示“如果f有值,则将f的值分配给postaction,否则将postaction分配给自身”(即,不要更改它).

我不知道这段代码的确切用途,但是返回的对象有一个函数done,可以使用函数参数,也可以不使用函数参数

在完成之后,这句话

f || postaction
如果f不是null/undefined,则表示f或postaction返回f,如果调用

myreturnObject.done();
myreturnObject.done(function(newImages) { ... });
这评估为

postaction = postaction
postaction = f.
因为f不是define。如果调用

myreturnObject.done();
myreturnObject.done(function(newImages) { ... });
这评估为

postaction = postaction
postaction = f.

然后在imageLoadPost函数的for循环中使用Postaction。如果您想在那里进行一些自己的编码,可以将其作为参数传递给done方法,如图所示。如果您不需要在那里进行任何额外编码,请不要将函数传递给Postaction。然后将调用定义为fallback的空Postaction函数。

我不知道是什么这段代码正是用来做什么的,但是返回的对象有一个函数done,可以使用函数参数,也可以不使用函数参数

在完成之后,这句话

f || postaction
如果f不是null/undefined,则表示f或postaction返回f,如果调用

myreturnObject.done();
myreturnObject.done(function(newImages) { ... });
这评估为

postaction = postaction
postaction = f.
因为f不是define。如果调用

myreturnObject.done();
myreturnObject.done(function(newImages) { ... });
这评估为

postaction = postaction
postaction = f.

然后在imageLoadPost函数的for循环中使用Postaction。如果您想在那里进行一些自己的编码,可以将其作为参数传递给done方法,如图所示。如果不需要在那里进行任何额外编码,请不要将函数传递给Postaction。然后将调用定义为fallback的空Postaction函数。

如果对象e empty它将不包含done方法。在作者的页面上,他将其称为空对象。看起来他使用术语“blank object”的意思不正确。此外,名为postaction的函数不能是匿名函数,您(或outher)需要Means可能是一个惰性的或空的函数:调用它除了隐式返回
未定义的
之外没有任何作用。如果对象为空,它将不包含done方法。在作者的页面上,他将其称为空对象,这看起来像是他错误地使用了术语“blank object”来表示。此外,不能使用名为postaction的函数一个匿名函数,您(或输出者)的意思可能是一个惰性的或空的函数:调用它除了隐式返回未定义的
undefined