【问题标题】:What is 'typeof define === 'function' && define['amd']' used for?'typeof define === 'function' && defined['and']' 是做什么用的?
【发布时间】:2015-06-20 11:43:07
【问题描述】:

以下代码有什么用途?工厂函数在这里做什么?这里的根是窗口对象。工厂是默认的java脚本函数吗?在什么样的场景下可以使用这种类型的代码。此代码来自toggle.js from Simon Tabor。 Zepto 和 ender 是库。这主要用于图书馆吗?

   if (typeof define === 'function' && define['amd']) {
        define(['jquery'], factory);
     } else {
      factory(root['jQuery'] || root['Zepto'] || root['ender'] || root['$']|| $);
    }

【问题讨论】:

  • 它是 require.js 的一部分

标签: javascript


【解决方案1】:

此代码检查是否存在 require.js,这是一个 JavaScript 依赖管理库。

如果 'define' 不是未定义的并且它是一个函数并且还定义了 'amd'(异步模块定义),则代码假定 require.js 正在运行。

如果是这样,那么它定义了“工厂”并将 jQuery 作为依赖项传递给它。否则,它将通过将代码附加到根对象来设置代码所需的依赖项。

至于“工厂”是什么:它不是Javascript框架定义的,它很可能是同一个文件中的一个函数。它将接受参数 jQuery。

【讨论】:

  • 我还有一个问题。在Vue.js 我可以看到typeof define === 'function' && define.amd ? define(factory)。在没有库名称的情况下定义工厂的目的是什么?当我需要它时,我将如何访问它?我的意思是我不能写像require(['vue'], vue => console.log) 这样的东西。它对我不起作用,因为该库是在没有名称的情况下定义的。谢谢!
  • 只是为了澄清。我无法在我的window 上获取 Vue,我也无法通过require 获取 Vue,因为我正在获取Mismatched anonymous define() moduleHere 被描述为我们不能使用匿名定义:您在自己的脚本标签中有一个匿名定义(“调用 define() 且没有字符串 ID 的模块”)(我假设它们实际上是指全局中的任何地方范围)。所以,我不明白为什么框架以这种方式实现这个define 逻辑。再次感谢!
  • 我不知道 vue.js 你应该问一个全新的问题。
猜你喜欢
  • 2013-02-12
  • 2014-12-01
  • 1970-01-01
  • 2013-06-01
  • 2019-08-13
  • 2012-06-09
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
相关资源
最近更新 更多