;(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的新手,上面代码的最后几行真让我困惑。请帮我理解一下语法。我能学到哪些书吗?
答案 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允许在大多数但不是所有情况下编写没有分号的代码。为了避免将分号放在前面的潜在错误是必要的(假设该代码前面确实存在某些内容)。
希望它有所帮助。