Javascript闭包和范围的问题

时间:2013-09-20 00:30:10

标签: javascript d3.js closures

目前我有以下内容:

function bar() {
    // Do fancy D3 stuff here

    function update(source) {
        // Do fancy D3 update
    }
}

我点击一个按钮就会调用bar(),但我需要从update()之外访问bar()(以及传递参数) 。我已经尽可能多地阅读了闭包,但我仍然无法让它完全正常工作。我已经看到有关向window对象分配函数以使内部函数全局化的内容,但我还没有这样做。

3 个答案:

答案 0 :(得分:1)

我不确定你要求的是什么,但我不明白为什么你不能在update之外声明bar。然后,您可以从update内外访问bar

以下是jsfiddle

HTML:

<button onclick="bar()">Tree</button>

的javascript:

function bar() {
    var p = document.createElement("h2");
    var pText = document.createTextNode("fancy D3 stuff in bar");
    p.appendChild(pText);
    document.body.appendChild(p);

    update("bar");
}

function update(source) {
    var p = document.createElement("h1");
    var pText = document.createTextNode("fancy D3 stuff in update called from " + source);
    p.appendChild(pText);
    document.body.appendChild(p);
}

答案 1 :(得分:0)

要将“更新”功能分配给窗口,您可以执行此操作。

function bar() {
    // Do fancy D3 stuff here

    var update = function (source) {
        // Do fancy D3 update
    }

    window.updateBar = update;

}

答案 2 :(得分:0)

如果我能理解你,你想要那样的东西吗?

var a = {
    b : 0,
    set : function(input){
       b = input;         
    },
    get : function(){
        alert(b);
    }
}

a.set('34234');
a.get();