Javascript范围:匿名函数中的访问类字段

时间:2018-07-24 01:16:33

标签: javascript reactjs d3.js scope anonymous-function

我在我的(JavaScript)代码中遇到了一个有趣的问题,我认为这与范围有关。如果是这种情况,我想更好地了解JS中的范围。

我怀疑这是否有意义,但是我还在使用React和D3。

我的代码要点如下:

// 1

export default class C extends Component {
    // 2

    componentDidUpdate() {
        // 3

        ...
        var node = svg.append('svg')
            .append('svg:image')
            .attr('xlink:href', function(d) {
                // 4

                return dict['foo'];
            });
    }
}

我正在尝试在匿名函数中使用外部对象的内容。

    dict = {
        foo: 'bar.svg'
    };

到目前为止,我发现,如果我在 3 4 位置声明了上述对象,则代码执行得很好。但是,如果将对象声明移到方法( 2 )之外或整个类( 1 )之外,则会出现错误:dict is not defined

位置1和2如何使它们无法在匿名函数中使用?

2 个答案:

答案 0 :(得分:1)

我相信您应该可以使用箭头功能。

export default class C extends Component {
    componentDidUpdate() {
        ...
        var node = svg.append('svg')
            .append('svg:image')
            .attr('xlink:href', (d) => this.dict['foo']);
    }
}

答案 1 :(得分:-2)

javascript中有两个作用域。本地范围和全局范围。如果您具有

之类的功能
TestFunc() {
// here variable 'a' local variable in this function
// and you can't access 'a' outside of this function
 var a = 'test';
}

but if you have a class like
class TestClass {
 // here 'b' is a global variable of this class
 // and it can be accessed from any of the method of this class using 'this' keyword
 b: string;

 // example of method
 TestGFunction() {
 // here 'b' is a global variable of class 'TestClass'
  this.b = 'test3';
}
}

希望它可以帮助您了解javascript中本地和全局范围的概念。