2017-06-15 71 views
-1

試圖理解爲什麼在JS函數中沒有傳入參數或者之前在腳本的任何位置聲明過參數。傳遞給函數的JavaScript日期操作'date'參數

你可以看到在這裏checkAvailable函數參數「日期」 ...

var dateToday = new Date(); 

$('#visit').datepicker({ 
    beforeShowDay: checkAvailable, 
    minDate: dateToday 
}); 

var unavailableDates = ["19-10-2012","1-2-2013","15-10-2012"]; 

function checkAvailable(date) { 
    dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear(); 
    if ($.inArray(dmy, unavailableDates) != -1) { 

     return [false, "", "unAvailable"]; 
    } else { 
     var day = date.getDay(); 
     return [(day != 0 && day != 6)]; 
    } 
} 

有人能解釋爲什麼參數存在?

謝謝!

這裏是所有的代碼on jsfiddle

+2

如果'date'不會傳遞中,該函數將拋出一個'TypeError'因爲'date'將會是未定義的。例如,你確定參數沒有通過'bind'傳遞嗎? – cubrr

+0

剛剛添加到jsfiddle的鏈接,你可以看到它在那裏工作,並且在控制檯中沒有TypeError .... – philar3

回答

1

的參數將在調用時被傳遞。在你鏈接它的例子中,它可能看起來沒有參數被傳入,但實際上該函數在那個時候沒有被調用。該函數只被傳遞到庫中,然後將從另一個地方調用它,並傳入一個日期進行檢查。你可以看到自己這一點in the source code of the library

beforeShowDay.apply((inst.input ? inst.input[ 0 ] : null), [ printDate ]) 

apply方法是函數實際上是調用,並[ printDate ]數組中的值作爲參數傳入。

0

這是一個回調函數,因此會被jQuery的地方調用,參數是唯一可用的則

1

該鏈接顯示它是jQuery UI的日期選擇器的回調函數。函數調用發生在jQuery UI的日期選擇器的源代碼:

Fiddle

這裏有一個簡單的例子:

var callback = function (a, b, c) { 
 
    console.log(a, b, c); 
 
} 
 

 
callback.apply(null, ['alpha', 'beta', 'gamma']);

相關問題