如何在闭包中更新变量?

时间:2016-08-02 22:51:41

标签: javascript closures chartist.js

好的,所以有一个名为ChartistJS的图表库。我在其中使用名为Axistitle plugin的插件来显示axisTitle。我创建了一个plunker来突出问题。现在的问题是,当我打开下拉列表时,我希望根据我选择的选项看到不同的Axis标题。听起来很简单。

现在,如果您转到chartist-plugin-axistitle.js的源代码,请在第44和49行找到两个console.logs(options)。现在打开开发人员控制台,清除控制台并从下拉列表中选择选项距离。您将在第44行和第49行看到两个console.log()。现在查看第44行的变量axisY.axistitle和第49行的axisY.axistitle。看看有什么不同?第44行必须为Distance(km),这是期望值,第49行的值为Unit。为什么?上面一行中的值更改为Distance(km),它仍然是Unit?它正在执行和打印,但为什么功能没有采取更新的值?我觉得这与封闭有关吗?我该如何解决这个问题?如何获取其中更新的选项值?

帮助表示赞赏。感谢

修改

因为我应该在这里给出一些简约的代码。

Chartist.plugins.ctAxisTitle = function(options) {

    options = Chartist.extend({}, defaultOptions, options);
    console.log(options); // I get updated values
    console.log("I am printed everytime too. Because I am supposed too.");
    return function ctAxisTitle(chart) {
        console.log("I will get printed first time but not subsequent times. I don't know why?");
        chart.on('created', function(data) {
            console.log("I am printed every time as chart is re-rendered/created every time it is updated");
console.log(options); //Should be closure of above value. But I won't take updated options value. I'll stick with the one I was initialized with. Coz I am stupid.
        });
    };
};

0 个答案:

没有答案