ES6使用箭头功能分配变量

Ale*_*lex 5 javascript ecmascript-6

我刚刚开始熟悉ES6语法,我想知道是否可以使用箭头函数分配给变量.我正在编写一个基本的轻量级AJAX帮助程序库,状态为200,我想将有效负载返回给用户,我目前使用它:

var responseData = "";
switch (payload.returnType.toLowerCase()) {
    case "json" : responseData = JSON.parse(httpRequest.responseText); break;
    case "text" : responseData = httpRequest.responseText; break;
    default : responseData = null; break;
}
callback(null, responseData);
Run Code Online (Sandbox Code Playgroud)

这很好,但我不能不认为如果我这样做,我可以让这个更清洁:

callback(null, () => { switch(payload.returnType.toLowerCase()) { ... });
Run Code Online (Sandbox Code Playgroud)

我希望return语句将表达式的结果作为我的回调中的第二个参数发送,但是当我从调用者控制日志时它会输出switch语句.

或者我试过:

var responseData = () => {
    switch (payload.returnType.toLowerCase()) {
        case "json" : return JSON.parse(httpRequest.responseText); break;
        case "text" : return httpRequest.responseText; break;
        default : return null; break;
    }
}
callback(null, responseData);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,responseData始终为空.是否可以将返回值作为我的第二个参数,或者将其responseData作为箭头函数的结果绑定?

leo*_*ess 9

更短的自执行功能:

let res = (() => {
  return something;
})()
Run Code Online (Sandbox Code Playgroud)

或者使用您的代码:

var getResponseData = (() => {
    switch (payload.returnType.toLowerCase()) {
        case "json" : return JSON.parse(httpRequest.responseText); 
        case "text" : return httpRequest.responseText; 
        default : return null;
    }
})();
Run Code Online (Sandbox Code Playgroud)

您可以清楚地看到此代码段的区别:

let res = (() => {
  return something;
})()
Run Code Online (Sandbox Code Playgroud)


Lau*_*nce 8

您创建匿名函数但不执行它.

例如:

var getResponseData = () => {
    switch (payload.returnType.toLowerCase()) {
        case "json" : return JSON.parse(httpRequest.responseText); 
        case "text" : return httpRequest.responseText; 
        default : return null;
    }
};
callback(null, getResponseData());
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,这很好用,然后如果我想在回调参数中执行它,我会把它称为带有`(()=> {...})()的闭包;`对吗? (5认同)
  • 是的,你会喜欢别的什么. (2认同)