javascript的小括号“()”表达式可以帮助我们把javascript语句组合分块并且每对小括号都会返回一个值且在同一语句中具有优先执行权。例如:

[code lang=”js”]
var result, result2;
result = 5 * (2 + 3); //这是一个表达式,分别进行了加法和乘法的运算,结果是25。
alert(result2); //result2等于undefined,声明变量时并未赋值。下面的小括号表达式在此时并未执行,因为此时执行的alert操作是一个语句,下面的小括号表达式是另一语句,产生了两个语句,小括号只有在同一语句中才具有优先执行的权利。
(result2 = 6); //result2等于6。
[/code]

javascript会先执行小括号内的运算,2+3=5并把5返回然后在执行小括号外的运算,也就是5*小括号返回的5,结果是25。数学都学过,相信很容易理解。

小括号内不能声明变量并且不会改变括号内所执行语句的域。例如:

[code lang=”js”]
function a() {
(function _b() {});
alert(_b); //程序会报错,_b并未声明
}
function b() {
var _b;
(_b = function () {});
alert(_b); //结果是function () {}
}
a();
b();
alert(_b); //程序会报错,_b并未声明,上面b函数中的_b与此_b处不同的域。
[/code]

小括号表达式可以执行多条语句,每条语句用逗号结束,会返回最后一条语句执行结果的返回值。例如:

[code lang=”js”]
var a, b, c, result;
result = (a = 1, b = 2, c = 3, a * (b + c)); //小括号内会依次执行a变量的赋值、b变量的赋值、c变量的赋值、b变量加c变量的结果乘以a变量的操作并把结果返回赋值给result变量。
alert(result); //5
[/code]

小括号把javascript语句组合分块且不能声明变量,如果未遇到逗号或结束右括号则认为是一条语句。所以小括号括起来的匿名函数即使javascript引擎解析到}时也不会结束语句,所以函数后可以直接用括号使其运行。例如:

[code lang=”js”]
var a, b, c, result;
result = (function () { a = 2; }(), function () { b = 3; }(), function () { c = 4; }(), function () { return a * (b + c); }());
//小括号表达式内依次创建匿名函数并执行,共创建了四个匿名函数且都运行了,最后一个匿名函数运行后会返回运算的值且小括号表达式也会把此值返回并赋给变量result。
alert(result); //14
[/code]

合理利用小括号表达式可以简化程序的开发。例如利用小括号返回值执行匿名函数。例如:

[code lang=”js”]
var result;
(result = 5, function () { alert(result * 6); })(); //结果会弹出30
[/code]

首先程序声明变量result,然后执行小括号语句,result赋值5,创建一个匿名函数,并把这个匿名函数返回,最后直接用括号运行这个匿名函数。

注意:直接使用小括号表达式作为语句开始时此条语句的上一条语句结束时应该有分号,以免出现未知错误。例如:

[code lang=”js”]
var a = function () {
alert(a);
}
(a()); //会报错,上面声明匿名函数后进行赋值操作赋给变量a,这种方式声明的函数后面直接跟一对小括号时小括号的作用是运行这个函数,会认为小括号和函数是一条语句,所以函数结尾处应用引号结束语句。
function b() {
alert(b);
}
(b()); //正常,上面声明的函数是以函数字面量生成的函数而且并未进行赋值操作,javascript引擎解析的时候发现}就会自动结束,所以不用分号结束符也是正常的。
[/code]

我有话要说