3
我試圖搜索這個JavaScript函數的解釋。我想了解這個函數如何獲得價值?有人可以建議一個地方,我可以閱讀更多關於傳遞/使用價值的方式。瞭解JavaScript
pie.value = function(_) {
if (!arguments.length) return value;
value = _;
return pie;
};
此代碼來自D3 JS。
我試圖搜索這個JavaScript函數的解釋。我想了解這個函數如何獲得價值?有人可以建議一個地方,我可以閱讀更多關於傳遞/使用價值的方式。瞭解JavaScript
pie.value = function(_) {
if (!arguments.length) return value;
value = _;
return pie;
};
此代碼來自D3 JS。
這是一個依靠關閉的吸氣/吸氣器。
var value = 5; // initial value
var getterSetter = function(newValue) {
// value is closed from the outer scope
if (!arguments.length) {
// CASE A
return value;
}
// // CASE B
value = newValue;
return getterSetter;
};
getterSetter() // arguments.length is 0 (CASE A) so displays value (5)
getterSetter(10) // arguments.length is 1 (CASE B) so values is set to 10
getterSetter() // now this displays 10 since value now is 10 (CASE A)
console.log(value); // Also displays 10, this is the same value variable
現在在CASE B中,您可以看到getterSetter返回自身。這樣,就變成(種)可鏈接,這意味着你可以這樣做:
getterSetter(1)(2)(3)(); // assign 1 then 2 then 3 and displays 3;
你的情況是因爲pie
對象在實例B返回有點差別,而不是功能pie.value,這意味着你可以做到這一點:
pie.value(1).value(2).value(3).value();
好吧現在我明白了,我沒有看到頂部的變量。 – 2015-02-06 06:17:01
這是不可能的說,因爲'價值'沒有在你發佈的代碼中聲明。該函數內部的符號'value' * *不與* pie對象的屬性名稱相同。 – Pointy 2015-02-06 02:57:22
你的意思是[http://underscorejs.org/](http://underscorejs.org/)? – amitthk 2015-02-06 02:59:09
「這樣」是什麼意思?它只是以正常的方式傳遞一個參數。參數的名稱是'_'。 – Barmar 2015-02-06 03:11:26