Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要了解主干网的主要功能_Javascript_Backbone.js - Fatal编程技术网

Javascript 需要了解主干网的主要功能

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

我正在尝试学习AdvanceJavaScript,一些人建议我向其学习

  • (函数(工厂)
    中的
    工厂
    ,是
    (函数(根、主干、$)
    中的根吗
  • 什么是工厂
  • 什么是脊梁
  • 什么是?
  • 美元是多少

让我们通过命名匿名函数来简化这一过程

(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>