Github上的Redux ToDo示例

时间:2018-02-25 00:36:57

标签: javascript reactjs redux

我将阅读Redux文档并从Todo示例开始:

https://github.com/reactjs/redux/tree/master/examples/todos

工作正常。虽然有一些基本的东西我不明白。以下是index.js文件中的代码片段,用于定义操作:

let nextTodoId = 0
export const addTodo = (text) => ({
  type: 'ADD_TODO',
  id: nextTodoId++,
  text
})

可以在以下网址查看整个文件:

https://github.com/reactjs/redux/blob/master/examples/todos/src/actions/index.js

正如您所看到的,变量nextTodoId在" addtodo'之外被初始化。功能。我想知道' nextTodoId'每次调用函数时,变量都不会重置为0?

有人可以解释一下吗?

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

nextTodoId归addTodo之外的作用域所有。因此,该变量可以从addTodo访问,但不归其所有,所以即使从函数返回,变量也会存在。

答案 1 :(得分:1)

这是importrequire在Javascript模块中的工作方式的函数。模块加载器在每个导入/需要的文件中运行一次代码。之后,它会缓存结果,并且以后导入或要求该文件的任何其他模块都会获得缓存版本。

所以nextTodoId仅在文件首次import ed / require d时初始化。

答案 2 :(得分:1)

nextTodoId变量在与addTodo函数相同的范围(模块范围)中声明。 模块文件中的内容被视为封装在范围闭包中,就像函数闭包一样。 模块仅评估一次,即使它们被多次导入也是如此。因此,nextTodoId变量只声明一次,每次调用addTodo函数时都会使用nextTodoId变量的当前值。