这个语法在javascript中意味着什么

时间:2013-05-08 06:32:37

标签: javascript jquery

;(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的新手,上面代码的最后几行真让我困惑。请帮我理解一下语法。我能学到哪些书吗?

2 个答案:

答案 0 :(得分:5)

首先看一下:

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

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

(function(a,b){
    console.log(a+b);//should print 3
})(1,2);

答案 1 :(得分:4)

该代码中有许多值得一提的东西。

1)这是一个函数的定义,之后立即被称为

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

2)注意

window.Register= window.Register|| {}

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

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

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

4)至于这一行

'use striction';

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

What does "use strict" do in JavaScript, and what is the reasoning behind it?

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

希望它有所帮助。