1
;(function(Register, $, undefined) {

'use strict';

Register.Model = {
    Uid: ''
};

Register.Handler= {
    init: function() {
        Register.Model.Uid= $('body').data('uid');
    }
};

})(window.Register= window.Register|| {}, jQuery);

你好,我是 javascript 和 JQuery 的新手,上面代码的最后一行真的让我很困惑。请帮助我理解该语法。请问有什么书可以学习吗?

4

2 回答 2

5

先看看这个:

(function(){
   console.log("executed");
})();

代码定义了一个函数然后立即执行它,你也可以将参数传递给函数,例如:

(function(a,b){
    console.log(a+b);//should print 3
})(1,2);
于 2013-05-08T06:38:52.290 回答
4

该代码中有许多值得一提的地方。

1) 这是一个函数的定义,之后立即调用

(function(r, $, undefined){
   // some stuff
})(window.Register= window.Register|| {}, jQuery);

2)请注意

window.Register= window.Register|| {}

作为第一个参数传递。这意味着如果它已经存在(实际上如果它评估为布尔值 true,它足够接近) ,window.Register则设置为,否则设置为新对象。由于运算符在右侧返回事物,因此整个语法是以下的快捷方式:window.Register{}=

if (!window.Register) {
    window.Register = {};
}
(function(r, $, undefined){
   // some stuff
})(window.Register, jQuery);

3) 该函数接受 3 个参数,但传递了 2 个参数。因此命名的最后一个参数undefined将是undefined(它应该是一个关键字,但有人可能会覆盖它)。

4) 至于这条线

'use striction';

这可能是一个错误,应该是'use strict';。它告诉解释器使用更严格的规则(有助于避免例如意外的全局变量)。阅读本文了解更多信息:

“use strict”在 JavaScript 中做了什么,背后的原因是什么?

5);使用前面的分号是因为 JavaScript 允许在大多数但不是所有情况下编写不带分号的代码。为了避免潜在的错误,有必要在前面放置一个分号(假设该代码前面确实有一些东西)。

希望能帮助到你。

于 2013-05-08T06:37:58.047 回答