【问题标题】:Uncaught TypeError: .. is not a function in javascriptUncaught TypeError: .. is not a function in javascript
【发布时间】:2016-04-26 08:44:50
【问题描述】:

我正在尝试使用 d3.js 绘制折线图。

Javascript

function lineChart(){
    ...
}

function update(){
    ...
    var lineChart = lineChart()
        .x(d3.scale.linear().domain([2011, 2014]))
        .y(d3.scale.linear().domain([0, 1000000]));
    ...
}

但是控制台说Uncaught TypeError: lineChart is not a function
如何解决这个问题?

【问题讨论】:

标签: javascript jquery d3.js


【解决方案1】:

你正在遮蔽你的功能。

当您声明另一个与上一个变量/函数同名的变量/函数时,就会发生这种情况。您应该做的是为第二个声明赋予另一个名称,就像@andlrc 在他的评论中所说的那样。

var lineChartResult = lineChart()...

您可以在此处了解有关阴影的更多信息:Setting & Shadowing Properties

【讨论】:

    【解决方案2】:

    如果您使用现有函数的名称声明变量,则该函数在该上下文中不再可用(被变量隐藏)。更改变量的名称以避免命名冲突。

    此代码与您的代码等效,也许您可​​以看到发生了什么:

    function lineChart() {...} //function declared
    
    function update() {
        var lineChart; // variable created, its value is undefined
        lineChart=lineChart() // linechart is not a function, is an undefined value!
    }
    

    【讨论】:

      【解决方案3】:

      如果您不想更改变量名称,另一种解决方案是使用 this 限定方法名称,以消除其前面的变量名称的歧义:

      var lineChart = this.lineChart()...

      【讨论】: