jQuery是一个JavaScript库还是框架?

129

41
一个人的图书馆是另一个人的框架。 - nnnnnn
1
这个问题不适合在这里讨论,因为每个答案都同样有效:“你最喜欢的是什么?”请参考Stack Overflow的帮助中心。另外,我们称之为库还是框架有什么关系呢? - EJoshuaS - Stand with Ukraine
7个回答

176

一个库。根据主页所说,我也同意。

框架通常是强制实现某种解决方案的工具,而jQuery只是一个工具,可以使您更轻松地实现想要做的事情。


60
图书馆是您从程序中调用的内容。框架是调用您程序的内容。 - Thilo
2
有关库和框架的比较,请参阅 “控制反转” https://dev59.com/O3A75IYBdhLWcg3w3NPf#3057818 - cheshireoctopus

30

14
虽然我同意,但自己取的名字/口号并不能证明什么。目前有数千个所谓的“框架”,实际上只是库而已。 - kapex
@Kapep 但是反过来的情况就不太常见了:并不是很多框架称自己为“库”。我猜“框架”这个术语听起来更有吸引力一些... - Franklin Yu

20
当然,它是一个Javascript库。但关于它是否是一个框架,我认为它不是一个框架。请看维基百科对软件框架的定义:http://en.wikipedia.org/wiki/Framework_(software)

它是一组提供了定义的应用编程接口的软件库。

而jQuery只是一个单独的库。接下来它说:

框架包含区别于普通库的关键特征:

  1. 控制反转 - 在框架中,与库或普通用户应用程序不同,整个程序的控制流不是由调用者决定,而是由框架决定。
因此,我认为它不是一个框架。

9
根据angularjs网站的介绍,它是一个库,即一组在编写Web应用时有用的函数集合。您的代码负责调用库中适当的函数,类似于jQuery。而框架则是Web应用程序的特定实现,其中您的代码填充了一些细节。框架掌控并在需要特定的应用程序时调用您的代码,如durandal、ember等。请注意,此处保留了HTML标签。

8

“Framework”和“library”并不一定是互相排斥的术语。框架通常是一个库或者几个库的集合。

严格来说,jQuery是一个库,但在某种程度上,它确实符合软件框架的定义。虽然许多人会争辩说jQuery严格意义上不符合软件框架的定义,但事实是,没有其他JavaScript框架完全符合框架的定义。

软件框架的一个定义特点是其代码受到保护以防止修改。在JavaScript中,这显然不是这种情况。可以调用到客户端代码的任何库或框架都是可修改的,尽管修改它们违反最佳实践。因此,如果可以将Bootstrap或AngularJS称为框架,则没有理由不能将jQuery称为框架。 此链接 包含了更详细的解释,说明了jQuery如何满足被称为框架的标准。

或许最好的解释为什么jQuery更像是一个框架而不是一个库,是作为开发者,您可以选择不使用其类似框架的功能。例如,您可以在同一行中混合使用简单的jQuery语句和标准JavaScript语句。AngularJS和Bootstrap通常不允许您这样做。因此,关于jQuery是否是框架的准确答案是“取决于您选择将其用作框架还是库”。


2
我同意这里所有的回答,jQuery本身确实是一个库而不是框架。正如Saeed所指出的,其中一个关键区别是控制反转。但是,你可以使用jQuery的功能来创建自己的框架。
例如:有一些基于jQuery构建的项目被定义为框架:jQuery Mobile:一个优化触摸的Web框架JavaScriptMVCsammy.js等。
还有其他基于jQuery构建的库,比如jQuery UI
在定义库和框架时,有些地方似乎是语义学问题,但这些例子有助于让我明确界限。

1
如果我们谈论控制反转,那么几乎所有人都在上面的线程中谈论jQuery是一个框架。
它拥有IOC,例如当我们编写函数$(document).ready{}时...它是调用这个方法的容器,我们只需将代码放在大括号内。我们不是这个方法的调用者,因此是“控制反转”。
这样jQuery就是一个框架。

1
大多数规模较大的库都提供了至少某种类型的类似回调的方法来实现某些目的。你可以编写很多jQuery代码而不必依赖于 ready() - Nathan Tuggy
@NathanTuggy,那么为什么详细讨论框架与库的区别还要谈到IOC呢?如果已经有了,就不必谈论“依赖”或“不依赖”。 - pinkman
因为框架式IoC的特点是必须使用它,而不是像自选菜单一样按需使用。在框架中,你没有选择:控制权已经被倒置了。 - Nathan Tuggy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接