在返回

时间:2018-03-22 16:31:50

标签: javascript ecmascript-6 babel

您好我正在审核react redux和动作文件中的一个示例我看到了这个函数

function login(email, password) {
    return dispatch => {
        dispatch(request({ email }));

        userService.login(email, password)
            .then(
                data => {
                    dispatch(success(data.user));
                    history.push('/');
                },
                error => {
                    dispatch(failure(error));
                    dispatch(alertActions.error(error));
                }
            );
    };

    function request(user) { return { type: userConstants.LOGIN_REQUEST, user } }
    function success(user) { return { type: userConstants.LOGIN_SUCCESS, user } }
    function failure(error) { return { type: userConstants.LOGIN_FAILURE, error } }
}

很明显,这个函数正在将调度文件返回到调用reducer 我唯一不理解的部分是它在返回后如何定义一些函数并在返回中使用它。 这个功能工作正常,但如果我能做些什么来改善它,请告诉我。

2 个答案:

答案 0 :(得分:-1)

虽然函数在使用后声明,但它仍然合法function s(不是箭头函数),而var(不是letconst)被悬挂到块的开头,所以代码是有效的。

function login(email, password) {
    function request(user) { return { type: userConstants.LOGIN_REQUEST, user } }
    function success(user) { return { type: userConstants.LOGIN_SUCCESS, user } }
    function failure(error) { return { type: userConstants.LOGIN_FAILURE, error } }

    return dispatch => {
        dispatch(request({ email }));

        userService.login(email, password)
            .then(
                data => {
                    dispatch(success(data.user));
                    history.push('/');
                },
                error => {
                    dispatch(failure(error));
                    dispatch(alertActions.error(error));
                }
            );
    };
}

MDN有article of hoisting

答案 1 :(得分:-1)

在JavaScript中,声明变量或函数的位置并不重要。最后,就好像它是在当前范围的开头声明的。

看看这个:



log("hello");

function log(greeting) { console.log("hello"); }

//




事实上,就好像你在开始时定义了log一样。

var也是如此,但有所不同:

如果你有:

console.log(a); // Exception. `a` is unknown.

但是,如果您之后声明a



console.log(a); // writes undefined

var a = 2; 




为什么要写undefined?您会看到我们不再获得例外。那是因为声明被移动了,但没有移动。上面的代码实际上相当于:



var a;

console.log(a);

a = 2;