如何解释以下JavaScript代码?

时间:2015-06-04 22:20:45

标签: javascript jquery image

鉴于以下代码段(它来自blueimp扩展jquery.fileupload-image.js)我需要帮助找出该部分 - 请参阅我的文本下方的较大部分:

!loadImage(
    file, 
    function(img) { 
       if(img.src) { 
          data.img = img; 
       } 
       dfd.resolveWith(that, [data]); 
    }, 
    options 
)) { 
return data;
}

当我在浏览器上删除有效的JPEG图像文件时,使用debug逐步执行代码时,它将通过if(($。type(options ...)并输入!loadImage(上面部分,然后它将返回到返回dfd.promise();语句并返回到行data.img = img;其中将定义一个有效的图像。

我不知道发生了什么,在哪里!loadImage(...实际上是要加载JPEG图像数据?

我最终要做的是让它显示一个CIELAB TIFF图像我已经更改了options.filetypes设置,以便它现在可以接受标准的RGBA TIFF图像并正确显示它。我有一些自定义代码将在浏览器中显示CIELAB TIFF图像,但我对下面的代码知之甚少,无法确定在哪里正确修改它以插入我的自定义代码来获取data.img = img;从我的自定义代码返回,它将返回一个CIELAB TIFF返回的img数据。我将读取CIELAB TIFF图像的自定义代码放入画布对象。当我将CIELAB TIFF图像拖到浏览器上时,它将输入if(($。type(...语句然后点击返回dfd.promise();语句但它不会返回到data.img = img ;就像我拖拉JPEG时一样,所以img未定义。

有人可以向我解释下面的代码并帮助我正确修改如何插入我的自定义javascript来读取CIELAB TIFF图像并将其正确地输入data.img = img;下面? (注意你处理一个可以追溯到PDP-11和TECO编辑器黑暗时代的老C和C#家伙,所以轻轻地对我说,我需要大量的手握才能完成这个 - 谢谢)。

processActions: {

        // Loads the image given via data.files and data.index
        // as img element, if the browser supports the File API.
        // Accepts the options fileTypes (regular expression)
        // and maxFileSize (integer) to limit the files to load:
        loadImage: function (data, options) {
            if (options.disabled) {
                return data;
            }
            var that = this,
                file = data.files[data.index],
                dfd = $.Deferred();
            if (($.type(options.maxFileSize) === 'number' && file.size > options.maxFileSize) ||
                (options.fileTypes && !options.fileTypes.test(file.type)) ||
                    !loadImage(
                        file,
                        function (img) {
                            if (img.src) {
                                data.img = img;
                            }
                            dfd.resolveWith(that, [data]);
                        },
                        options
                    )) {
                return data;
            }
            return dfd.promise();
        },

1 个答案:

答案 0 :(得分:2)

(为清楚起见,我减少了if语句)

第一部分是if语句的一部分:

if (foo || bar || 
!loadImage(
    file,
    function (img) {
        if (img.src) {
            data.img = img;
        }
        dfd.resolveWith(that, [data]);
    },
    options
)

而第二部分是如果声明真实的话要执行的块。

){
    return data;
}