Array.filter()
方法具有异步行为。
根据文档,在我看来,它不应该以这种方式工作。
此外,在这种情况下,它通常不允许引用回调。
我对图书馆的使用有限,但也让我感到困惑,它如何以这种方式做出反应。
我不是 ECMAScript 的专家,我犯了一些错误吗?
我只想过滤一个数组并将结果作为几个选项发送到HTML select元素。
我有这样的事情:
var selCompanyDeps = departments.filter(fromSelectedCompany);
fillSelect($("#selDeparts"), selCompanyDeps, 'departmentID', 'name', selectedID);
function fromSelectedCompany(value){
var selectedCompany = $( "#SelComps" ).val();
return (value.companyID===Number(selectedCompany));
}
由于
答案 0 :(得分:3)
Array.filter
不是异步方法,但您看起来令人困惑的是JavaScript程序的执行顺序。
当浏览器解析您的代码时,浏览器将查找命名函数并将其添加到当前作用域中声明的名称列表(称为function hoisting)。
因此,fromSelectedCompany
在您致电fillSelect
之前执行,因此您的代码等同于以下内容:
function fromSelectedCompany(value){
var selectedCompany = $( "#SelComps" ).val();
return (value.companyID===Number(selectedCompany));
}
var selCompanyDeps = departments.filter(fromSelectedCompany);
fillSelect($("#selDeparts"), selCompanyDeps, 'departmentID', 'name', selectedID);