github上的redux todo示例



我正在浏览redux文档,并从此处开始以下示例:

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

它可以正常工作。有一些我不明白的基本内容。以下是定义操作的index.js文件的代码段:

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

可以在以下URL上看到整个文件:

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

您可以看到,变量NextTodoid在" AddTodo"函数之外进行了初始化。我想知道" nexttodoid"变量在每次函数被称为0时都不会重置为0?

有人可以解释吗?

感谢您的时间。

nextTodoId变量在与addTodo函数的同一范围(模块范围(中声明。模块文件中的内容就像将范围封闭在范围闭合中一样,就像函数闭合一样。即使多次导入,模块也仅评估一次。因此,nextTodoId变量仅声明一次,每次称为addTodo函数时都会使用nextTodoId变量的当前值。

NextTodoid由Addtodo之外的范围所有。因此,该变量可以从addtodo访问,但并非由其所有,因此即使您从函数返回该变量也将存在。

这是 importrequire在JavaScript模块中工作的函数。模块加载器一次在每个导入/必需的文件中运行代码。之后,它可以缓存结果,以及将来导入或需要该文件的任何其他模块获得缓存版本。

因此,nextTodoId仅是第一次初始化文件是import ED/requireD。

最新更新