在变量声明中使用
var a,b = 3;
我所理解的执行顺序为:
- b = 3
- var a = underfind
- var b = 3
- var a = underfind; var b = 3
Dom: 测试B是否为全局变量
function test(){
var a,b = 3;
}
test();
b; // b is not defind
function test(){
var a,b = 3;
return function(){
alert(b); // a = underfind
}
}
test().call(null); // 3
在流程控制语句中
if(a = 3, true) { alert(a) } // 3
if(a = 3, false) { alert(a) } // no
alert(a) // 3
在上面的例子中,程序先从左至右运行,但是if执行的条件却是根据第二个的boolan值执行,再看一个Dom
var a,b,c = 1;
if(c){ //method1
b = 1;
if(b){
a = 1;
if(a){
alert();
}
}
}
if(c){ //method2
if(b=1, c){
if(a=1, b){
alert();
}
}
}
这两行方法都是等价的,但是可读性却明显不是一个层次,在多重流程控制语句中使用,号是多么舒服
改变运行优先级
alert(3,4) // 3
alert((3,4)) // 4
这怎么有种 && 短路求值的味道,取最后一个为true的值,即覆盖
在 return 中返回多个值
var a = 3
,b = 4;
console.log((function(){ return b = 5,b })()) // 等价于 b = 5; return b
相当于将两个单独的语句合并成一句,可读性更高
再找一个JQ源码上面的例子
( w.fn.init = function(){}).prototype = w.fn,q = w(r) // w.fn;q 也是等价的
未完待续......