我将阅读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?
有人可以解释一下吗?
感谢您的时间。
答案 0 :(得分:1)
nextTodoId归addTodo之外的作用域所有。因此,该变量可以从addTodo访问,但不归其所有,所以即使从函数返回,变量也会存在。
答案 1 :(得分:1)
这是import
和require
在Javascript模块中的工作方式的函数。模块加载器在每个导入/需要的文件中运行一次代码。之后,它会缓存结果,并且以后导入或要求该文件的任何其他模块都会获得缓存版本。
所以nextTodoId
仅在文件首次import
ed / require
d时初始化。
答案 2 :(得分:1)
nextTodoId
变量在与addTodo
函数相同的范围(模块范围)中声明。
模块文件中的内容被视为封装在范围闭包中,就像函数闭包一样。
模块仅评估一次,即使它们被多次导入也是如此。因此,nextTodoId
变量只声明一次,每次调用addTodo
函数时都会使用nextTodoId
变量的当前值。