javascript - 推入应用程序功能后返回数组的长度
问题描述
我有以下存储数据的应用程序功能。用户可以添加新项目,它返回数据数组的长度。
我试图理解为什么在函数中返回数据会返回包括推送项目的数据,但返回的data.length
不是,也不是应用过滤器。如果我请求应用程序功能范围之外的数据长度,它会返回它,包括推送的项目。
在我的示例中 getfn
,app.data.length
和app.data.filter
返回添加的项目,但getcntfn
不filterinitialfn
返回。为什么是这样?
var app = (function () {
var data = ["initial"];
function add(x) { data.push(x) }
function getfn() { return data };
function getcntfn() { return data.length };
function filterinitialfn(filter) { return data.filter(x => x == filter) }
return {
add: function (x) { add(x) },
data:data,
getfn: getfn(),
getcntfn: getcntfn(),
filterinitialfn: function(filter) {filterinitialfn(filter)}
}
}());
app.add("added")
console.log("app.getfn", app.getfn) //["initial", "added"]
console.log("app.getcntfn", app.getcntfn) //1 ???
console.log("app.data.length", app.data.length) //2
console.log("app.filterinitialfn", app.filterinitialfn("added")) //[] ???
console.log("app.filterinitial=>", app.data.filter(x => x == "added")) //["added"]
解决方案
因为您在返回时立即调用该函数,因此无法从初始状态更改它,因此将其更改为:
return {
add: function (x) { add(x) },
data:data,
getfn: getfn,
getcntfn: getcntfn,
filterinitialfn: filterinitialfn,
}
当然,使用 then 时应该包含括号。
推荐阅读
- pytorch - 每次迭代在所有类上使用 CNN / ResNet 进行训练/预测 - 输入数据的串联 + 匈牙利算法
- javascript - Nodejs 中基于角色的聊天系统
- javascript - 如果我检查 changeInfo.url 的值,chrome.tabs.onUpdated.addListener 不会发送消息
- arrays - 错误:在不是结构或联合的东西中请求成员“长度”
- css - 有没有办法将文本与 CSS 内容属性(chrome)中的图像垂直对齐?
- c# - ASP.NET MVC 帖子不会将值发送到 SQL 数据库
- django - 没有找到带有参数'('',)'的url的反向,但仅在特定机器上
- reactjs - 在 react js 中添加和删除一个类列表
- c++ - 是否可以在 Visual Studio 代码中制作 sln 文件?
- autodesk-forge - 如何获取 AutoCAD 几何图形的查看器坐标?