【问题标题】:Global Variable Lifespan in JavascriptJavascript中的全局变量寿命
【发布时间】:2019-10-03 03:48:58
【问题描述】:

我正在学习 React(和 Javascript),研究数据模型是我自学的一部分。在我的第一次尝试中,我创建了一个基本的 javascript 对象,该对象将与 getter 和 setter 一起使用,如下所示:

story_store.js

var story = {
  id:"",
  title:""
}

module.exports = {
    getStory: function() {
        return story
    }

    setStory: function(id, title) {
        story.id = id;
        story.title = title;
    }
}

然后我会在网络调用期间设置该对象,并且能够访问(获取)它,直到应用程序终止。此版本按预期工作。

对于下一个版本,我将模型和 getter/setter 放在单独的文件中,并使用数组来存储模型对象。

story_model.js

export function Story(id, title, text='') {
    let story = {}
    story.id = id;
    story.title = title;
    story.text = text;

    return story
}

story_store.js

var stories = [];

module.exports = {
    getStory: function(id) {
        return stories.find(x => x.id === id);
    },
    setStories: function(stories) {
        stories.forEach(function(story) {
            stories.push(story);
        });
    }
}

这次 setter 按预期工作,但是当我稍后在执行中尝试访问该数组时,它是空的。我猜这个问题与我在将对象放入数组之前创建对象的方式有关,但这对我来说似乎很奇怪。有什么想法吗?

【问题讨论】:

    标签: javascript arrays reactjs object ecmascript-6


    【解决方案1】:

    您的问题是 setter 设置了参数 stories 的值 - JavaScript 从内到外查找变量,一旦找到它就会停止。您需要更改setStories 中的参数名称,使其查找全局stories 数组:

    setStories: function(storyArray) {
        storyArray.forEach(function(story) {
            stories.push(story);
        });
    }
    

    还请注意,您可以使用 concat 来做同样的事情:

    setStories: function(storyArray) {
        stories.concat(storyArray);
    }
    

    【讨论】:

    • 我真的以为我会学到一些东西,但这只是一个愚蠢的错误。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2015-04-22
    • 2017-01-04
    相关资源
    最近更新 更多