2017-05-26 89 views
2

我試圖理解在d3.js V4的tickSize文檔:源代碼d3.js V4

axis.tickSize([大小])<>

如果指定大小,將內部和外部刻度尺寸設置爲指定值並返回軸。如果沒有指定大小, 返回當前內打勾大小,默認爲6

當我檢查源代碼,我得到這個:

axis.tickSize = function(_) { 
    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; 
    }; 

我真的不明白是什麼繼續。

  • 什麼是_作爲函數的參數?
  • 這段代碼(tickSizeInner = tickSizeOuter = +_, axis)在做什麼?

來源:https://github.com/d3/d3-axis/blob/master/src/axis.js#L140

回答

2

如果沒有規定的方法參數的方法將返回tickSizeInner當前值。或者,如果提供參數,它將設置tickSizeInnertickSizeOuter變量。

return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; 

這是一款採用了ternary operator這是此的簡便方法:

if(arguments.length) { 
    tickSizeInner = tickSizeOuter = +_; return axis 
} 
else { 
    return tickSizeInner; 
} 

參見this question, King's answerthis doc關於與三元逗號

這是在這一行做了操作。

這裏的功能邏輯的一個精簡版:

function tick(_) { 
 
    return arguments.length ? _ : 6; 
 
    }; 
 
    
 
console.log(tick()) 
 
console.log(tick(4))

在這種方法的優點是你的getter和setter方法是同一個。

注意,在JavaScript零falsey,看看下面的線(未定義也是falsey,作爲對比,看also this):

if(0) { console.log("true"); } 
 
else { console.log("false"); } 
 

 
if(1) { console.log("true"); } 
 
else { console.log("false"); } 
 

 
if(undefined){ console.log("true"); } 
 
else { console.log("false"); }

所以,如果沒有參數傳遞,然後返回當前刻度大小。如果傳遞一個參數(下劃線是一個有效的變量名,見this question),那麼它被強制爲一個數字(+_)並設置爲等於勾號大小(請參閱this question將字符串轉換爲數字的最佳答案)。

這裏的強制變量爲整數的例子:

var a = "1"; 
 
var b = "2"; 
 

 
console.log(a+b); 
 

 
a = +a; 
 
b = +b; 
 

 
console.log(a+b);

最後,你可以在代碼中顯示的方式賦值多個變量。例如:

var a = 0; 
 
var b = 0; 
 

 
a = b = 5; 
 

 
console.log(a); 
 
console.log(b);