const actionsMap = {
[GET_USER]: (state, action) => ({ post: action.msg })
};
我有這段代碼,我已經偶然發現。我一直在用{}格式看過的箭頭函數,這個()包裝器是什麼意思?箭頭與()後面的含義是什麼?
const actionsMap = {
[GET_USER]: (state, action) => ({ post: action.msg })
};
我有這段代碼,我已經偶然發現。我一直在用{}格式看過的箭頭函數,這個()包裝器是什麼意思?箭頭與()後面的含義是什麼?
隨着箭頭的功能,你可以使用一個單獨的語句或函數體塊。這兩個是相同的:
() => foo
() => {
return foo;
}
在您的例子中,如果拉姆達定義爲() => {post: action.msg}
對象({}
)將被解釋爲一個塊體,而不是一個對象。運行時會嘗試解析它作爲一個等同於:
function() {
post: action.msg
}
這是一個名爲標籤和屬性訪問,並且不會在這裏太大的意義。通過在括號包裹,你暗示,這是要計算表達式,在單表達體脂肪箭頭功能規則踢解析器,使其等同於:
function() {
return {post: action.msg};
}
要解決的單
foo.reduce((p, c) => (c.counted = true, p += c.value));
這將設置的c
的counted
屬性,添加c.value
前:當你想要做的兩個相關的東西(在地圖偶爾有用/減少算法),你可以用括號來組表達對錶達式規則到p
並返回的結果作爲p
的新值的。
括號將ECMAScript中的表達式包裝起來,並且可以使用逗號運算符對多個表達式進行分組。評估組時,返回最後一個表達式的結果。
例如:
var i = 0, j = 0;
console.log((j += 10, i += 2), j);
將打印2 10
,由於j
在()
組中遞增,並且以後打印。
「......這顯然是無效的。」在這個特殊情況下實際上不是無效的,但當然不是預期的。 – 2015-07-10 16:24:10
@squint固定。我總是忘記標籤。 – ssube
謝謝,這個迴應比其他人更詳細,所以我把這個投票作爲正確投票,因爲它顯然意味着它是一個對象迴應。其他答案對其他人更簡潔,更好,因此請繼續檢查 –
這是ES6箭頭功能。更多閱讀: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
ES6
(state, action) => ({ post: action.msg })
ES5
function(state, action) {
return { post: action.msg };
}
Returning object literals
Keep in mind that returning object literals using the concise syntax params => {object:literal} will not work as expected:
var func =() => { foo: 1 }; // Calling func() returns undefined! var func =() => { foo: function() {} }; // SyntaxError: function statement requires a name
This is because the code inside braces ({}) is parsed as a sequence of statements (i.e. foo is treated like a label, not a key in an object literal).
Remember to wrap the object literal in parentheses:
var func =() => ({ foo: 1 });
所以..如果你想返回一個對象文本,把它包在()
你確定這是JavaScript?它不會在我的控制檯中解析。我認爲這是Coffeescript或其他這樣的衍生語言。 – Erik
這看起來像一個lambda表達式,它不受JS的支持。 –
@Erik - 這是ES6 –