调用在 Javascript 库之外定义的函数

Calling a function defined outside of the Javascript library

我正在 图书馆工作。我试图修改它,以便它使用自定义播放器而不是 HTML5 播放器。 因此,我将对 play() 等的函数调用替换为对我的自定义播放器的调用(比如 custFunc1())。这些调用在单独的 文件中定义:custPlayer.js

所以在我的 index.html 文件中,我将首先包含 custPlayer.js 文件,然后是构建的 文件。

但是问题是,在使用 grunt 构建 video.js 包时,我收到 custFunc1 未定义的错误,因此 grunt 无法创建video.js图书馆。

现在我从一位同事那里得知添加 /* 全局 custFunc1 */ 在我调用 custFunc1 包中的特定文件的开头解决了这个问题。 grunt 构建成功并且工作正常。

所以我想知道的是:

  1. 这实际上是如何解决问题的,因为这与 javascript 中的评论完全一样,它如何以不同的方式对待它并理解它表明函数定义将存在在图书馆外面?

  2. 单词global是javascript中的某种关键字吗?

  3. 除了我提到的方法之外,还有其他方法可以实现吗?

  4. 稍微不同的是,我想问一下 is the rough equivalent of ?

你的 javascript 正在 linted 作为你的 grunt 进程的一部分,如果你查看项目文件夹的根目录,你应该会看到一个类似 .jshintrc 的文件或类似的文件(不同取决于 linter)。

您当前的设置意味着 linter 一次一个地检查您的 .js 文件,如果它遇到来自另一个文件的变量或函数,它会抛出您看到的错误。您可以关闭此检查或将 custFunc1 添加到已知全局变量的数组中。在 jshint 中,您可以这样做 - https://github.com/gruntjs/grunt-contrib-jshint#jshintrc

{
  "globals": {
    "custFunc1": true
  }
}

全局变量可能已经存在于文件中,因此只需添加 custFunc1: true 即可。

哦,然后回答问题 1 - 注释类型语法告诉 linter 忽略当前文件的设置,基本上覆盖 .jshintrc 文件中的设置。

2 - 是的,它是 jshintrc 中的一个设置,您将 custFunc1 添加到文件本身而不是在 .jshintrc 文件中全局添加。

3 - 上面提到。

4 - 从未使用过制造商,但我相信它的相似之处在于它是一个预处理工具