我是中级
javascript开发人员,试图了解javascript开发人员如何编写他们的代码,我决定开始寻找Backbone库作为起点.
这里有一些用于骨干初始设置的代码片段,请帮助我理解它.
code1 –
(function(){ var root = this; }).call(this);
是否有任何特定的理由使用调用方法而不是简单地使用(),或者它只是一个编码首选项,如果我必须编写相同的代码,我会做这样的事情.
(function(root){ })(this);
代码2 –
var Backbone; if (typeof exports !== 'undefined') { Backbone = exports; } else { Backbone = root.Backbone = {}; }
现在在全局范围内没有导出的定义,也没有在本地范围内的任何地方定义那么如果我正在编写相同的代码,那么if是什么
var Backbone = root.Backbone = {};
代码3
var _ = root._; if (!_ && (typeof require !== 'undefined')) _ = require('underscore')._;
再次,我无法在本地或全球范围内找到需求的定义
解决方法
代码块1
这取决于开发人员的偏好,您可以用任何一种方式编写代码,实际上,许多库确实更喜欢您建议的样式.
代码块2
这个块是对AMD Boiler Plate的一种看法.AMD库提供了split your JavaScript code into modules所需的钩子.在代码块的情况下,exports对象是CommonJS Module Standard使用的全局.如果导出全局不存在则将Backbone添加到根对象直.
一个有趣的侧面说明是Backbone不支持导出到流行的RequireJS AMD库.
代码块3
require是AMD库引入的另一个全局,见上文.