2015-06-20 388 views
6

以下代码的用途是什么?工厂功能在这里做什么?这里root是窗口对象。工厂是默认的Java脚本函数吗?在哪种情况下可以使用这种类型的代码。此代码来自toggle.js from Simon Tabor。 Zepto和恩德是图书馆。这主要用于图书馆吗?'typeof define ==='function'&& define ['amd']'用于什么?

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

它是require.js的一部分 – Legends

回答

14

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

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

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

至于'工厂'是什么:它不是由Javascript框架定义的,它最有可能是同一个文件中的一个函数。它将采用参数jQuery。

+0

我还有一个问题。在[Vue.js](https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.js)我可以看到'typeof define ==='function'&& define.amd?定义(工厂)'。没有图书馆名称的工厂定义的目的是什么?我需要时如何才能访问它?我的意思是我不能写'require(['vue'],vue => console.log')。它不适用于我,因为图书馆没有名字。谢谢! –

+0

只是为了澄清。我无法在我的'window'上获得Vue,而且我无法使用'require'来获取Vue,因为我得到了'不匹配的匿名define()模块'。 [Here](https://stackoverflow.com/questions/15371918/mismatched-anonymous-define-module)被描述为我们不能使用匿名定义:_你有一个匿名定义(“调用define()字符串ID“)在它自己的脚本标记中(我假设它们是指全球范围内的任何地方)_。所以,我不明白为什么框架以这种方式实现这个'define'逻辑。再次感谢! –

+0

我不知道vue.js你应该问一个全新的问题。 –