【问题标题】:javascript - another function scope multiple .js file questionjavascript - 另一个函数范围多个 .js 文件问题
【发布时间】:2019-02-15 12:38:47
【问题描述】:

我有 2 个.js 文件。包括,顺序为library.js,后跟other.js。从abc 内部调用如下所示的记录器函数时,我得到Uncaught TypeError: logger is not a function

logger 可以在 other.js 脚本中的 abc 外部找到并调用,所以我知道它已加载。如何从abc 内部调用logger(以避免代码重复)?我认为logger.js 将在全球范围内,并且可以从任何地方访问。

库.js

var logger = function(param){
  //...
  console.log(param);
 // ...
}

logger("library.js is included");

其他.js

var x = 0;
logger("I am other"); // this happens!
var abc = {
    showDebug : true,
    doStuff : function(){
    //...
    if(this.showDebug){
        logger("Debugging now"); // this errors
    }
    // ...
  }
}
abc.doStuff();

【问题讨论】:

  • 您是否 100% 确定该错误是专门从该行引发的?如果是这样,错误是什么?
  • 我在本地尝试过,它正在工作。 ![Test](i.stack.imgur.com/0r50K.png) HTML 有这样的顺序:
  • 感谢大家检查。我确实总结了我的代码,所以我会看看我是否可以发布完整的脚本。如果我将 logger 函数放在 other.js 的顶部,它在两个位置都可以正常工作,没有错误。一旦进入外部文件,它将无法在“abc”中工作
  • 实际上 - 运行我的缩写版本确实有效....doh
  • 对不起大家 - 我不小心在其他地方做了一个 logger = 而不是 logger() 。我的坏...

标签: javascript function scope typeerror


【解决方案1】:

它是可访问的,工作正常。也许在 doStuff 方法中,您正在将其他内容重新分配给 logger 变量。

const logger = string => console.log(string)

logger('works')

var abc = {
    showDebug : true,
    doStuff : function(){
      if(this.showDebug){
          logger("Debugging now");
      }
    }
}

abc.doStuff();

【讨论】:

  • 为看到这个而干杯:如果我将记录器函数放在 other.js 的顶部,它在两个位置都可以正常工作而没有错误。一旦进入外部文件,它将无法在“abc”中工作
  • 你是对的——我无意中重新分配了它。应该显示完整的脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 2020-04-18
  • 2018-06-21
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多