什么是这个 ES6 函数的意义或解释?

11 浏览
0 Comments

什么是这个 ES6 函数的意义或解释?

标题不好,我一找到一个适合的名字就会编辑它。

我一直在学习Redux,这是我第一次看到这种类型的函数。

export default connect(null, actionCreators)(TodoApp)

我无法理解,显然"null"和"actionCreators"是传递给connect函数的参数,但是"(TodoApp)"是做什么用的?

0
0 Comments

这段代码中的问题是在调用connect(null, actionCreators)(TodoApp)时,函数connect接受了两个参数,返回了一个匿名函数,而后又立即调用了这个匿名函数并传入了一个参数TodoApp

为了解决这个问题,可以将connect(null, actionCreators)的结果保存在一个变量中,然后再调用这个变量并传入参数TodoApp,如下所示:

var fun = connect(null, actionCreators);
fun(TodoApp);

这样做的结果与connect(null, actionCreators)(TodoApp)是相同的,但是可读性更好,并且可以在fun中添加其他逻辑。

0
0 Comments

这段代码演示了JavaScript中的第一类函数的特性,即函数可以像普通数据一样传递。在这个例子中,connect(null, actionCreators)返回一个匿名函数,而TodoApp作为参数传递给这个匿名函数。

为了更好地理解,我们来看一个简单的例子:

var obj = {
  name: "Test",
  age: 10
}
var f = () => {
  // f函数要执行的操作
  
  // 返回一个接受对象作为参数的匿名函数
  return (obj) => {
    
    // 对传入的对象进行操作
    console.log(obj.name)
  }
}
// 下面两种调用方式是等价的
  // 1.- 
  f()(obj);
  // 2.- 
  var f2 = f();
  f2(obj);

通过上面的代码,我们可以看到,f()返回的是一个函数,我们可以直接调用这个函数并传入一个对象作为参数。同样地,我们也可以先将f()的返回值赋值给一个变量,然后调用这个变量并传入相同的参数。

你自己已经对这段代码进行了解释,不过我根据你的评论做了一些测试,以确保我正确理解了背后的思想。

0