Javascript 函数混淆语法
Javascript function confused syntax
我对下面的代码有点困惑。很明显是用es6代码写的一个双箭头函数,但是有些部分我不明白。
第二个参数done
是一个什么都不做的空函数?或者它是用一个简单的 return
作为第二个箭头匿名函数的结果执行的?
XXXX.load 是 returns 一些结果的承诺函数。 Index
的调用者如何获得第二个参数 done
的结果,即 done(null, result)
?
es5中的等效代码是什么?
const Index = (name, done = () => {}) => (dispatch, getState) => {
return XXXX.load()
.then((result) => {
dispatch({type:OK});
done(null, result);
})
.catch((error) => {
dispatch({type:ERROR});
done(error);
});
};
The 2nd parameter named done is an empty function that does nothing?
这是一个参数。它接受你赋予它的任何价值。
如果调用者未传递第二个参数,则分配的 default 值是一个不执行任何操作的函数。这样就可以在不抛出 undefined is not a function 错误或进行显式测试以查看它是否为函数的情况下调用它。
How the caller of the Index can get the results of the 2nd parameter done ie done(null, result) ?
通过将它自己的函数作为第二个参数传递。
What is the equivalent code in es5?
var Index = function(name, done) {
if (!done) done = function() {};
return function(dispatch, getState) {
return XXXX.load()
.then(function(result) {
dispatch({
type: OK
});
done(null, result);
})
.catch(function(error) {
dispatch({
type: ERROR
});
done(error);
});
}
};
让我们一一道来:
Index (name, done = () => {})
定义了 done
的默认值,以防在调用 Index
时提供 none。这有助于在 done
为 null/undefined 的情况下不做任何检查。你也可以这样写
const Index = (name, done) => (dispatch, getState) => {
if (!done) {
done = () => {}
}
}
- 调用
Index
时,caller
只会传递一个函数作为第二个参数。
一般说明:Index
实际上 returns 一个需要 dispatch
and/or 一个 getState
参数的函数。
- 空函数是
done
的默认值。默认值可防止 运行 时间崩溃。
2 和 3 可以通过查看以下代码来理解:(只需 运行 它并查看控制台。
const DEFAULT_FUNCTION_VALUE = ()=> {};
const XXXX = {
load: function() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({data: 'from XXXX.load'});
},2000);
});
}
}
const Index = function(name='', done=DEFAULT_FUNCTION_VALUE) {
return function(dispatch, getState) {
return XXXX.load().then(function(result) {
console.log({result});
done(result);
}).catch(function(error) {
console.log(error);
});
}
}
function doneImplementation(data) {
console.log('Data from done- ', data);
}
Index('', doneImplementation)();
我对下面的代码有点困惑。很明显是用es6代码写的一个双箭头函数,但是有些部分我不明白。
第二个参数
done
是一个什么都不做的空函数?或者它是用一个简单的return
作为第二个箭头匿名函数的结果执行的?XXXX.load 是 returns 一些结果的承诺函数。
Index
的调用者如何获得第二个参数done
的结果,即done(null, result)
?es5中的等效代码是什么?
const Index = (name, done = () => {}) => (dispatch, getState) => {
return XXXX.load()
.then((result) => {
dispatch({type:OK});
done(null, result);
})
.catch((error) => {
dispatch({type:ERROR});
done(error);
});
};
The 2nd parameter named done is an empty function that does nothing?
这是一个参数。它接受你赋予它的任何价值。
如果调用者未传递第二个参数,则分配的 default 值是一个不执行任何操作的函数。这样就可以在不抛出 undefined is not a function 错误或进行显式测试以查看它是否为函数的情况下调用它。
How the caller of the Index can get the results of the 2nd parameter done ie done(null, result) ?
通过将它自己的函数作为第二个参数传递。
What is the equivalent code in es5?
var Index = function(name, done) {
if (!done) done = function() {};
return function(dispatch, getState) {
return XXXX.load()
.then(function(result) {
dispatch({
type: OK
});
done(null, result);
})
.catch(function(error) {
dispatch({
type: ERROR
});
done(error);
});
}
};
让我们一一道来:
Index (name, done = () => {})
定义了done
的默认值,以防在调用Index
时提供 none。这有助于在done
为 null/undefined 的情况下不做任何检查。你也可以这样写
const Index = (name, done) => (dispatch, getState) => {
if (!done) {
done = () => {}
}
}
- 调用
Index
时,caller
只会传递一个函数作为第二个参数。
一般说明:Index
实际上 returns 一个需要 dispatch
and/or 一个 getState
参数的函数。
- 空函数是
done
的默认值。默认值可防止 运行 时间崩溃。
2 和 3 可以通过查看以下代码来理解:(只需 运行 它并查看控制台。
const DEFAULT_FUNCTION_VALUE = ()=> {};
const XXXX = {
load: function() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({data: 'from XXXX.load'});
},2000);
});
}
}
const Index = function(name='', done=DEFAULT_FUNCTION_VALUE) {
return function(dispatch, getState) {
return XXXX.load().then(function(result) {
console.log({result});
done(result);
}).catch(function(error) {
console.log(error);
});
}
}
function doneImplementation(data) {
console.log('Data from done- ', data);
}
Index('', doneImplementation)();