2
なぜ、startDateとendDateがフィルタ関数に渡されたコールバックでスコープに含まれていないのか説明できますか?コールバック関数のレキシカルスコープ
var events = [],
eventsDataSource = [],
statusChstatusChanges = [],
statusChangesDataSource = [];
function filterData() {
var startDate = $('#start-date').data("kendoDatePicker").value();
var endDate = $('#end-date').data("kendoDatePicker").value();
events = eventsDataSource.filter(function (item) {
debugger;
});
statusChanges = statusChangesDataSource.filter(function (item) {
debugger;
});
}
コードを変更して、それ以下のコードに変更したとき。 starDateとendDateはスコープ内にあります。コールバック/インライン関数のレキシカルスコープは、関数宣言とは異なる方法で作成されていますか?
function filterData() {
var startDate = $('#start-date').data("kendoDatePicker").value();
var endDate = $('#end-date').data("kendoDatePicker").value();
function dateIsBetweenStartAndEnd(item) {
return new Date(item.Date) >= new Date(startDate) && new Date(item.Date) <= new Date(endDate);
}
events = eventsDataSource.filter(dateIsBetweenStartAndEnd);
statusChanges = statusChangesDataSource.filter(dateIsBetweenStartAndEnd);
}
おそらく、推測ですが、 'events'first(' filterData'の外側)を宣言し、 'filterData'の後に' startDate'と 'endDate'を宣言するからです。それは吊り上げに問題がありますか? 'filterData'関数の中で' events'を宣言してみましょう – Pimmol