这个语法在javascript中是什么意思

这个语法在javascript中是什么意思,javascript,jquery,Javascript,Jquery,你好,, 我不熟悉javascript和JQuery,上面最后一行代码让我很困惑。请帮我理解这个语法。有我可以学习的书吗?在代码中有很多值得一提的东西 1) 这是一个函数的定义,之后立即调用 ;(function(Register, $, undefined) { 'use strict'; Register.Model = { Uid: '' }; Register.Handler= { init: function() { Register.Model.

你好,,
我不熟悉javascript和JQuery,上面最后一行代码让我很困惑。请帮我理解这个语法。有我可以学习的书吗?

在代码中有很多值得一提的东西

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

;(function(Register, $, undefined) {

'use strict';

Register.Model = {
    Uid: ''
};

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

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

(function(r, $, undefined){
   // some stuff
})(window.Register= window.Register|| {}, jQuery);
作为第一个参数传递。这意味着如果
window.Register
已存在(实际上,如果其计算结果为布尔值true,这足够接近),则设置为
window.Register
,否则设置为新对象
{}
。由于
=
运算符在右侧返回内容,因此整个语法是以下内容的快捷方式:

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

4) 至于这条线

if (!window.Register) {
    window.Register = {};
}
(function(r, $, undefined){
   // some stuff
})(window.Register, jQuery);
这可能是个错误,应该是
“严格使用”。它告诉解释器使用更严格的规则(例如有助于避免意外全局变量)。有关更多信息,请阅读:

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


希望有帮助。

该代码中有许多值得一提的内容

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

;(function(Register, $, undefined) {

'use strict';

Register.Model = {
    Uid: ''
};

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

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

(function(r, $, undefined){
   // some stuff
})(window.Register= window.Register|| {}, jQuery);
作为第一个参数传递。这意味着如果
window.Register
已存在(实际上,如果其计算结果为布尔值true,这足够接近),则设置为
window.Register
,否则设置为新对象
{}
。由于
=
运算符在右侧返回内容,因此整个语法是以下内容的快捷方式:

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

4) 至于这条线

if (!window.Register) {
    window.Register = {};
}
(function(r, $, undefined){
   // some stuff
})(window.Register, jQuery);
这可能是个错误,应该是
“严格使用”。它告诉解释器使用更严格的规则(例如有助于避免意外全局变量)。有关更多信息,请阅读:

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


希望有帮助。

首先看一下:

'use striction';
代码定义了一个函数,然后立即执行它, 还可以将参数传递到函数中,例如:

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

首先看看这个:

'use striction';
代码定义了一个函数,然后立即执行它, 还可以将参数传递到函数中,例如:

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

哪一位?这里有大约六种不同的语法。哪一个导致了问题?此语法类似于(function(obj,$,undefined){})(window.obj=window.obj |{},jQery);您的意思是这一行
(window.Register=window.Register | |{},jQuery)?@Uda-您引用了(超过)整行。你不明白哪一点?哪一点?这里有大约六种不同的语法。哪一个导致了问题?此语法类似于(function(obj,$,undefined){})(window.obj=window.obj |{},jQery);您的意思是这一行
(window.Register=window.Register | |{},jQuery)?@Uda-您引用了(超过)整行。你不明白哪一点?一些额外的阅读来补充这个答案,分号首先确保你在运行你的脚本之前结束其他人的脚本。是的,有一个名为
未定义的
参数对我来说似乎是一个可怕的想法。如果您向该函数传递了两个以上的参数,则对该函数中任何位置的
something===undefined
或在该函数中调用的函数等的任何测试都将产生完全不可预测的结果@JoeDyndale如果您这样做了,那将是正确的,但是该函数立即被调用,只有两个参数,并且由于没有对该函数的引用,其他人以后不可能调用更多参数。@JoeDyndale一点也不,它实际上是为了防止其他人在调用之前将
undefined
设置为超出此函数作用域的奇数值。一些额外的读取来补充此答案,分号首先确保在运行您的脚本之前结束其他人的脚本。是的,在我看来,拥有一个名为
未定义的
的参数似乎是一个可怕的想法。如果您向该函数传递了两个以上的参数,则对该函数中任何位置的
something===undefined
或在该函数中调用的函数等的任何测试都将产生完全不可预测的结果@JoeDyndale如果您这样做了,那将是正确的,但是该函数立即被调用,只有两个参数,并且由于没有对该函数的引用,其他人以后不可能调用更多参数。@JoeDyndale一点也不,它实际上是为了防止其他人在调用该函数之前将
undefined
设置为超出该函数范围的奇数值。