3 javascript jquery backbone.js
这是Backbone包装器
(function(){
// Backbone.js
}).call(this);
Run Code Online (Sandbox Code Playgroud)
为了比较.这是jQuery包装器:
(function( window, undefined ) {
// jQuery.js
})( window );
Run Code Online (Sandbox Code Playgroud)
关于BackBone包装器:
我理解需要立即调用(通过调用)函数表达式 - 提供隐私(封装)
我理解为什么它是一个匿名函数 - 减少全局符号.
但是我不明白"这个"指的是什么?+为什么包装器的区别?
参考
它有助于保留this
内部函数的价值.
对未绑定函数的调用*将重置this
为全局对象,即window
在浏览器的情况下.
看这个例子:
(function () {
alert("1: " + this); // this == myObject
(function () {
alert("2: " + this); // this == window
})();
(function () {
alert("3: " + this); // this == myObject
}).call(this);
}).call(myObject);
Run Code Online (Sandbox Code Playgroud)
*)即打电话func()
而不是obj.func()
.this
会变成obj
后一种情况.
首先澄清:
在backbone.js的情况下,他们包装代码的原因(function () {...}).call(this)
是这样你不需要知道全局对象的实际名称(global
在node.js的情况下).
请参见http://backbonejs.org/docs/backbone.html#section-4
第二个澄清:
如果脚本由浏览器运行,this
则该对象与window
您不在绑定函数的调用上下文中的对象相同.在一个独立的JS引擎(节点,犀牛...)全局对象没有命名window
,但global
.
jQuery开发人员知道你想在浏览器中运行他们的脚本,因为如果你没有一个文档可以在第一时间操作,那么你就没什么乐趣了.
Backbone.js与underscore.js一样,是通用的,因此开发人员不知道全局对象的名称.他们不在乎.
所以当jQuery的时候
(function (window) {
...
})(window);
Run Code Online (Sandbox Code Playgroud)
它也可以这样实现
(function () {
var window = this;
...
}).call(window);
Run Code Online (Sandbox Code Playgroud)
因为 this===window
(function () {
var window = this;
...
}).call(this);
Run Code Online (Sandbox Code Playgroud)
向后阅读示例以了解骨干黑客所做的事情.(它们调用全局对象root
.您可能想要读取带注释的代码.)
我会选择一个
(function (root) {
...
})(this);
Run Code Online (Sandbox Code Playgroud)
但最后我觉得没关系.
归档时间: |
|
查看次数: |
181 次 |
最近记录: |