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

标签 javascript object callback return anonymous-function

下面是一个将图片预加载到页面上的函数的源代码,作者添加了一些注释来解释代码的工作原理,但我仍然没有完全理解它。具体来说,他声称该函数的返回值是一个空对象,带有调用预定义匿名函数“postaction()”的“done()”方法。此代码的用户是否应该将他/她自己的代码输入到第 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
    }
  }
}

作者页面链接:http://www.javascriptkit.com/javatutors/preloadimagesplus.shtml

最佳答案

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

但是,它返回一个对象,其中包含一个 done 函数。

如果你这样做。喜欢

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

你的功能将被执行。如果你不提供 fnction 作为 done 的参数,默认的 postaction 将被调用并且什么都不做,因为它是一个空函数

关于javascript - javascript 中的匿名函数和空返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11760808/

相关文章:

JavaScript:在数组的 .length 上使用 defineProperty 访问器?

java - 在没有框架的情况下管理 DI 对象

c++ - 返回一个 vector (返回类型)

javascript - 是否可以触发/绑定(bind) jQuery UI 事件?

java - 代表们——如何做?

javascript - Windows 小工具 : Why are settings deleted when my gadget is closed?

javascript - 是否可以(无休止地)来回更改 innerHTML/textContent?

Javascript:如何实现异步函数队列(无需库)

javascript - 6502 仿真实现 ADC 和 SBC 的正确方法

java - 将文本文件插入 Map<Integer, Map<Integer, Double>>