無聊之際看了一下antd的源碼讹躯,發(fā)現(xiàn)一段代碼如下:
var ButtonTypes = (0, _type.tuple)('default', 'primary', 'ghost', 'dashed', 'danger', 'link');
var ButtonShapes = (0, _type.tuple)('circle', 'circle-outline', 'round');
var ButtonSizes = (0, _type.tuple)('large', 'default', 'small');
var ButtonHTMLTypes = (0, _type.tuple)('submit', 'button', 'reset');
// tuple 實際上就是一個返回參數(shù)數(shù)組的函數(shù)
var tuple = function tuple() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return args;
};
發(fā)現(xiàn)了 (0,function)
這個寫法好像好像沒見過秧荆,于是就研究了一下:
相關鏈接:https://developer.mozilla.org...
逗號操作符
概述:逗號操作符對它的每個操作數(shù)求值(從左到右)殿衰,并返回最后一個操作數(shù)的值杭朱。當你想要在期望一個表達式的位置包含多個表達式時,可以使用逗號操作符甚脉。這個操作符最常用的一種情況是:for 循環(huán)中提供多個參數(shù)将鸵。需要注意的是勉盅,var 語句中的逗號不是逗號操作符,因為它不是存在于一個表達式中顶掉。
案例:
function testFunc () {
var a = 0;
return (a += 1, a); // 等價于return ++x;
}
console.log((1, 2)); // console 2
console.log((a = b = 3, c = 4)); // console 4
逗號操作符的用處
先看一個案例:
var obj = {
myFunc: function () {
console.log(this === window);
console.log(this === obj);
}
}
obj.myFunc(); // false true
(0,obj.myFunc)(); // true false
輸出的結果為 :
false
true
ture
false草娜。
解釋:
在函數(shù)foo中,this指向的是obj痒筒,因為foo是obj的方法宰闰。所以this===window返回false就能理解了。
但是調用(0,obj.myFunc)()簿透,表達式(0,obj.foo)將評估它的每個操作數(shù)(從左到右)移袍,并返回最后一個操作數(shù)的值。換句話說老充,(0咐容,obj.foo)等于返回一個函數(shù):
? () {
console.log(this === window);// this是全局對象window,所以輸出的是true蚂维。
console.log(this === obj);// this是全局對象window,所以輸出的是false路狮。
}