JavaScript调用函数内的函数

时间:2014-05-01 20:33:30

标签: javascript function

我想在init()函数中调用几个函数,其中存储了所有共享变量。但是,变量不会传递给每个单独的函数。有谁能告诉我这是否是最干净的方法,或者有更好的设计呢?谢谢!

function scatterPlot(data) { /* code to do scatter plot */ }
function bestFitLine(data) { /* code to draw a regression line */ }
function drawAxes(data) { /* code to draw the axes */ }
function drawLegend(data) { /* code to draw legend */ }

function init() {
    data = { /* data object in JSON format */ }
    margin = { /* margin settings to be passed into each function */ }
    varNames = { /* some name information to be pass into each function */ }

    /* More common information to be passed */

    scatterPlot(data, margin, varNames, ...);
    bestFitLine(data, margin, varNames, ...);
    drawAxes(data, margin, varNames, ...);
    drawLegend(data, margin, varNames, ...);
}

2 个答案:

答案 0 :(得分:1)

另一种方法是将data,margin和varNames作为对象属性,这四个函数是方法。你必须改变一些东西让init返回一个对象,但它可能更干净。像

这样的东西
function Init() {
    this.data = { /* data object in JSON format */ }
    this.margin = { /* margin settings to be passed into each function */ }
    this.varNames = { /* some name information to be pass into each function */ }

    /* More common information to be passed */

    this.scatterPlot();
    this.bestFitLine();
    this.drawAxes();
    this.drawLegend();
}

然后

Init.prototype.scatterPlot = function(data) { /* code to do scatter plot */ }
// and same with the other three

当然这会使Init成为构造函数,并且必须这样调用:

var obj = new Init();

如果您不想或不能这样做,那么您拥有的应该没问题。

答案 1 :(得分:1)

您可以制作一个包含数据,边距和varNames的对象。

var ctx  = {data:{},margin:{},varNames:{}};

这使得方法的签名更简单。