【发布时间】:2016-03-29 12:00:25
【问题描述】:
有人可以向我解释为什么 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(在filterData之外),然后在filterData中声明了startDate和endDate。可能是吊装的问题?尝试在filterData函数中声明您使用它的events
标签: javascript scope lexical-scope