神秘的“未定义不是一个功能”

时间:2014-11-04 17:14:00

标签: javascript

我正在试着解决这个错误。这导致Uncaught TypeError: undefined is not a function

trange[abs][i] = BENTON(e1, z1, pa1, pI_pot, pz2, pa2);

这是我的功能:

function BENTON(e1f, z1f, a1f, I_potf, z2f, a2f) {
  //my stuff
  BENTON_return = ((a1f / TAU) / (z1f * z1f)) * (prnglo[q] + bzz * cz[n]);
  return BENTON_return;
}

this,但没有说明这个问题。我知道之前已经问过这个问题的变体,但是我希望这个错误的通用实例对其他也在学习JS的人有用。任何意见都将不胜感激。


更新

为了清楚起见,这里有一些代码可以将这个问题放在更好的环境中:

function Dreamweaver() {
  "use strict";
  ...
  trange = new Array(1);
  for (i = 0; i < trange.length; i = i + 1) {
    trange[i] = new Array(MAXE);//create a new 2-D array
  }
  ...
  i = 0;
  do {
    e1 = tenerg[i];
    trange[abs][i] = BENTON(e1, z1, pa1, pI_pot, pz2, pa2);
    i = i + 1;
  } while (tenerg[i] < 8.0);
  ...
}

function BENTON(e1f, z1f, a1f, I_potf, z2f, a2f) {
  "use strict";
  ...
  //a lot of mathematics
  bzz = (31.8 + 3.86 * Math.exp((5.0 / 8.0) * logi)) * (a2f / z2f) * 1.0E-06 * Math.exp((8.0 / 3.0) * Math.log(z1f));
  BENTON_return = ((a1f / TAU) / (z1f * z1f)) * (prnglo[q] + bzz * cz[n]);
  return BENTON_return;
}

JSLint回应了'BENTON' was used before it was defined的投诉。我以前成功完成了这种事情,在那里我构造了JS等效的子程序。在这里,我想要使用返回单个值的函数。我知道这可能是一个小错误,但我只是看不出我做错了什么。任何反馈都会很棒。

1 个答案:

答案 0 :(得分:0)

要解决这些问题,我的程序就像函数一样,传递一个为每个后续调用覆盖的单值数组。所以电话来自:

trange[i] = BENTON(e1, z1, pa1, pI_pot, pz2, pa2);

...到...

BENTON(e1, z1, pa1, pI_pot, pz2, pa2, reichweite);
trange[i] = reichweite[0];

我的功能来自:

function BENTON(e1f, z1f, a1f, I_potf, z2f, a2f) {
  //my stuff
  BENTON = ((a1f / TAU) / (z1f * z1f)) * (prnglo[q] + bzz * cz[n]);
  return BENTON;
}

...到...

function BENTON(e1f, z1f, a1f, I_potf, z2f, a2f, reichweite) {
  //my stuff
  reichweite[0] = ((a1f / TAU) / (z1f * z1f)) * (prnglo[q] + bzz * cz[n]);
  return reichweite;
}

另一方面,对于行为类似于子程序的过程,我传递一个多值数组[],该数组被主动填充而不被覆盖。

希望这将有助于那些新的JS。