關於逗號( , )在JS中的使用技巧

YzzHA發表於2018-05-15

 

在變數宣告中使用

 var a,b = 3;

我所理解的執行順序為:

  1. b = 3 
  2. var a = underfind 
  3. var b = 3 
  4. 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 也是等價的

 

 

未完待續......

 

 

 

 

 

 

 

 

相關文章