首页 > 解决方案 > 推入应用程序功能后返回数组的长度

问题描述

我有以下存储数据的应用程序功能。用户可以添加新项目,它返回数据数组的长度。

我试图理解为什么在函数中返回数据会返回包括推送项目的数据,但返回的data.length不是,也不是应用过滤器。如果我请求应用程序功能范围之外的数据长度,它会返回它,包括推送的项目。

在我的示例中 getfnapp.data.lengthapp.data.filter返回添加的项目,但getcntfnfilterinitialfn返回。为什么是这样?

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"]

标签: javascriptarraysfunction

解决方案


因为您在返回时立即调用该函数,因此无法从初始状态更改它,因此将其更改为:

return {
            add: function (x) { add(x) },
            data:data,
            getfn: getfn,
            getcntfn: getcntfn,
            filterinitialfn: filterinitialfn,
        }

当然,使用 then 时应该包含括号。


推荐阅读