2017-02-23 83 views
0

下面是相關的代碼段:

!function($){ 
    const figure = name => f => $(`<figure data-name="${name}"><img src="${URL.createObjectURL(f)}"><figcaption><input type=checkbox checked><br>${f.name}</figcaption></figure>`).data("f",f); 

$(document).on("change", "[data-preview-to]", function() { 
     $($(this).data("preview-to")).append($.map(this.files, figure(this.name))); 
     $(this).replaceWith(this.outerHTML); 
***OTHER CODE FOR SUBMIT**** 
}(jQuery); 

HTML 
<input type="file" data-preview-to="#preview" multiple="" name="fileToUpload[]"> 

第一個問題, 「功能($)!」對我來說這就是說,我不是一個函數,因爲「!」不是,但那不可能,因爲你爲什麼要聲明一個函數,那不是一個函數,那麼我認爲它很好,它可能會說「這樣做,即使文檔沒有準備好」,因爲(我認爲)函數( $),是文件準備速記。

但是,函數結束時,有一個(jquery),這是需要的,如果我刪除了,代碼失敗了,所以這必須做些什麼,那是不完全的JQuery。

第二個問題,是變量「figure」,我讀它的方式,沒有任何意義,是「將圖形聲明爲一個常量,取名稱的值,將其推入f,然後將其全部推入HTML但是,我沒有看到「f」是如何分配的,我知道它來自「$ .map(this.files,figure(this.name))」,但它看起來像是唯一的東西越來越發送到圖中的名稱(fileToUpload [])HTML輸入標籤。

這是什麼代碼,說和做?

感謝,

戴夫

回答

2

第一個只是內聯調用的函數表達式!用於將解析器從預期語句轉換爲期望表達式,以便function啓動函數表達式而不是函數聲明(這就是我們可以立即調用它的原因)。關於那個的詳情in this question's answers。在函數結束後使用()傳入jQuery,並作爲參數$接收。

figure是ES2015 +(又名「ES6」)arrow function(具體而言,箭頭函數返回的箭頭功能,它包含一個template literal [中反引號事情與${...}在它])。在這種情況下,由於這種特殊的功能不使用thisarguments或一對夫婦的其他東西,這是大致相當於該ES5和早期代碼:

var figure = function(name) { 
    return function(f) { 
     return $('<figure data-name="' + name + '"><img src="' + URL.createObjectURL(f)' + "><figcaption><input type=checkbox checked><br>' + f.name + '</figcaption></figure>').data("f",f); 
    }; 
}; 
+0

看起來我有一些功課。正在閱讀所有這些東西,這可能有點高級,但對我來說,這會讓頭部受傷。 – MaxThrust

1

功能(){}()

!function(){}(argument);表示立即調用創建的函數。

函數聲明function(){}返回undefined。如果我們試着立即調用這個函數

function() {}() 

它會拋出SyntaxError。通過使用 !操作者的功能之前,JS將其理解爲表達和運行成功地起作用

!function() {}() 

=>箭頭功能

const figure = name => f => $() 

// is equal to 
const figure = function(name){ 
    return function(f){ 
     return $(); 
    } 
} 

箭頭功能允許寫短碼。像普通函數一樣,箭頭函數由參數頭部和身體組成。

(arg1, arg2) => { 
    return 4; 
} 

不再需要寫function。 參數以標準方式傳遞,括號如(arg1, arg2) => {},或者只有一個參數 - 只能有參數arg => {}

身體代碼可以是通常的「塊體」,就像正常功能一樣。如果只有一個 - 返回表達,功能可能有「簡明體」

(arg1, arg2) => return 4; 

所以,如果你只有一個參數和身體表達,箭頭功能可採取短,但不尋常的形式

var sqr = x => x*x; 

// equal to 
var sqr = function(x){ 
    return x*x; 
} 
相關問題