javascript菜菜请教下面代码的含义

Hakiu 发布于 2013/07/24 14:45
阅读 203
收藏 0
(function(){
  //code
})(),function($){
  //$.extend
}(jQuery),function(t){
  //t.fn.functionname
}(jQuery),function(t){
  //t.fn.functioname2
}(jQuery);
以上代码(function(){})(),介货还能明白,然后后面跟了一个逗号,接着是扩展,原型等。上面的代码中的逗号是什么意义?fcuntion(t)(jQuery),是不是要跟着第一个匿名函数才能起作用?
加载中
0
Arrowing
Arrowing

连续执行N个函数

逗号后面的函数可以直接执行

第一个逗号前的函数有可能作为函数声明,故需要加上括号转化为函数表达式

字面上的意思貌似是这样的。。。

0
JonyZhang
JonyZhang

使用了javascript的逗号表达式,逗号表达式允许一条语句中执行多个表达式。
下面是常见用法:

var a=1,b=2,c=3,d,e; 

//连续执行表达式
d=b+c,e=a+b;

function demo(){
    var a=1,b=2,c,d;
    return c=a+b,d=b+c;
}
demo();  //结果是5

如果在函数中return一系列逗号串起来的表达式,最终return的是最后一个表达式的值

0
Hakiu
Hakiu

引用来自“JonyZhang”的答案

使用了javascript的逗号表达式,逗号表达式允许一条语句中执行多个表达式。
下面是常见用法:

var a=1,b=2,c=3,d,e; 

//连续执行表达式
d=b+c,e=a+b;

function demo(){
    var a=1,b=2,c,d;
    return c=a+b,d=b+c;
}
demo();  //结果是5

如果在函数中return一系列逗号串起来的表达式,最终return的是最后一个表达式的值

也就是说,(function(){//code})(),function($){$.extend.functioname(){}}(jquery),这两个函数间并没有什么联系吧?仅仅就是连续执行罢了,也就是说,用逗号或者分号是一样吗?
0
subying
subying
连续执行函数,两个函数之间没有联系
0
Hakiu
Hakiu
谢谢大家回答,总算弄明白了。。
0
JonyZhang
JonyZhang

引用来自“Hakiu”的答案

引用来自“JonyZhang”的答案

使用了javascript的逗号表达式,逗号表达式允许一条语句中执行多个表达式。
下面是常见用法:

var a=1,b=2,c=3,d,e; 

//连续执行表达式
d=b+c,e=a+b;

function demo(){
    var a=1,b=2,c,d;
    return c=a+b,d=b+c;
}
demo();  //结果是5

如果在函数中return一系列逗号串起来的表达式,最终return的是最后一个表达式的值

也就是说,(function(){//code})(),function($){$.extend.functioname(){}}(jquery),这两个函数间并没有什么联系吧?仅仅就是连续执行罢了,也就是说,用逗号或者分号是一样吗?

是的,你可以把代码排下版就是下面这样子:

(function () {})(),
function ($) {}(jQuery),
function (t) {}(jQuery),
function (t) {}(jQuery);
那么,第一个function为什么是用括号括起来呢?
因为,在一个完整的逗号表达式中,第一个式子必须是能够直接执行不报错的,而
function(){alert(123)}(); 这种写法是不能直接单独执行的,要用一堆括号包住整个语句,或者至少包住function:

//不能执行
function(){console.log(111)}();

//可以执行
(function(){console.log(111)}());

//可以执行
(function(){console.log(111)})();
更直接的例子:

//不能执行
function () {console.log(222)}(),
function () {console.log(333)}(),
function(){console.log(444)}();

//可以执行
1+2,
function () {console.log(222)}(),
function () {console.log(333)}(),
function(){console.log(444)}();

0
Hakiu
Hakiu

引用来自“JonyZhang”的答案

引用来自“Hakiu”的答案

引用来自“JonyZhang”的答案

使用了javascript的逗号表达式,逗号表达式允许一条语句中执行多个表达式。
下面是常见用法:

var a=1,b=2,c=3,d,e; 

//连续执行表达式
d=b+c,e=a+b;

function demo(){
    var a=1,b=2,c,d;
    return c=a+b,d=b+c;
}
demo();  //结果是5

如果在函数中return一系列逗号串起来的表达式,最终return的是最后一个表达式的值

也就是说,(function(){//code})(),function($){$.extend.functioname(){}}(jquery),这两个函数间并没有什么联系吧?仅仅就是连续执行罢了,也就是说,用逗号或者分号是一样吗?

是的,你可以把代码排下版就是下面这样子:

(function () {})(),
function ($) {}(jQuery),
function (t) {}(jQuery),
function (t) {}(jQuery);
那么,第一个function为什么是用括号括起来呢?
因为,在一个完整的逗号表达式中,第一个式子必须是能够直接执行不报错的,而
function(){alert(123)}(); 这种写法是不能直接单独执行的,要用一堆括号包住整个语句,或者至少包住function:

//不能执行
function(){console.log(111)}();

//可以执行
(function(){console.log(111)}());

//可以执行
(function(){console.log(111)})();
更直接的例子:

//不能执行
function () {console.log(222)}(),
function () {console.log(333)}(),
function(){console.log(444)}();

//可以执行
1+2,
function () {console.log(222)}(),
function () {console.log(333)}(),
function(){console.log(444)}();

你说的是正确的,第一个需要是立即执行的函数,不然,后面就出错
0
Hakiu
Hakiu
貌似最佳答应不能更改了。。。哎。。我刚刚写了一下,发现@JonyZhang的回答是正确的,正常感谢
返回顶部
顶部