我正在浏览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访问,但并非由其所有,因此即使您从函数返回该变量也将存在。
这是 import
和 require
在JavaScript模块中工作的函数。模块加载器一次在每个导入/必需的文件中运行代码。之后,它可以缓存结果,以及将来导入或需要该文件的任何其他模块获得缓存版本。
因此,nextTodoId
仅是第一次初始化文件是import
ED/require
D。