Javascript 需要了解主干网的主要功能
我正在尝试学习AdvanceJavaScript,一些人建议我向其学习Javascript 需要了解主干网的主要功能,javascript,backbone.js,Javascript,Backbone.js,我正在尝试学习AdvanceJavaScript,一些人建议我向其学习 是(函数(工厂)中的工厂,是(函数(根、主干、$)中的根吗 什么是工厂 什么是脊梁 什么是? 美元是多少 让我们通过命名匿名函数来简化这一过程 (function definingFn(factory) { //There are some lines of code here... })(function factoryFn(root, Backbone, _, $) { //Many lines of
- 是
中的(函数(工厂)
,是工厂
中的根吗(函数(根、主干、$)
- 什么是工厂
- 什么是脊梁
- 什么是?
- 美元是多少
(function definingFn(factory) {
//There are some lines of code here...
})(function factoryFn(root, Backbone, _, $) {
//Many lines of code here
});
也可以这样写:
function definingFn(factory) {/* code here */}
function factoryFn(root, Backbone, _, $) {/* code here */}
definingFn(factoryFn);
因此,definingFn
接收factoryFn
作为命名参数factory
。因此factory
是factoryFn
,作为参数传递给第一个函数的函数
然后在定义fn
中,定义了您询问的其他变量:
(function(factory) {
// Establish the root object, `window` (`self`) in the browser, or `global` on the server.
// We use `self` instead of `window` for `WebWorker` support.
var root = (typeof self == 'object' && self.self === self && self) ||
(typeof global == 'object' && global.global === global && global);
// Set up Backbone appropriately for the environment. Start with AMD.
if (typeof define === 'function' && define.amd) {
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
// Export global even in AMD case in case this script is loaded with
// others that may still expect a global Backbone.
root.Backbone = factory(root, exports, _, $);
});
// Next for Node.js or CommonJS. jQuery may not be needed as a module.
} else if (typeof exports !== 'undefined') {
var _ = require('underscore'), $;
try { $ = require('jquery'); } catch (e) {}
factory(root, exports, _, $);
// Finally, as a browser global.
} else {
root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));
}
})(function(root, Backbone, _, $) {
// more code here
})
有几个条件可以检测此脚本的环境,每个条件都使用特定值调用工厂
函数
让我们回顾一下“浏览器”环境:
定义fn
中的第一行定义了根
,即全局对象。在浏览器环境中,库使用的是self
全局对象()
然后提供空对象来代替Backbone
命名参数,作为“名称空间”来附加在factoryFn
中定义的内容
然后传递下划线
库的全局变量,该库使用作为其名称
然后是$
对象,它可以是jQuery、Zepto或Ender,这些libs中的一个,主干用于事件委派和XHR。您正在查看,我不会花太多时间关注它。工厂
是具有“多行代码”的函数。在加载主干网的依赖项后,您遇到的第一个函数调用了工厂
,即下划线.js(
)和jquery.js($
)。请将其视为依赖项注入版本:
<script src="jquery.js"></script>
<script src="underscore.js"></script>
<script>
function Backbone() {
// do stuff that depends on underscore and jquery
}
</script>
功能主干(){
//做一些依赖于下划线和jquery的事情
}
工厂在(函数(工厂)中,根在(函数(根,主干,u,$)中)吗
不,上面回答
什么是工厂
主干库的内部结构,一旦其依赖项被加载,它就会被初始化
什么是脊梁
以root.Backbone=factory(root,exports,{,$);
开始的空对象,其中导出被初始化为给定模块的{}
什么是?
图书馆
美元是多少
库是一个很好的答案,但ELI5。我想我们只是在寻找结构部分的定义。非常感谢,非常有用的答案。我对它了解不多+1非常感谢,那么,这种代码风格来自AMD模块模式。你建议我学习什么样的模式,既有用又简单?很高兴提供帮助,我会集中精力在上,尽管还没有100%的支持率,但它是一种坚实而简单的模式,具有很大的吸引力。
<script src="jquery.js"></script>
<script src="underscore.js"></script>
<script>
function Backbone() {
// do stuff that depends on underscore and jquery
}
</script>