redux 的 dispatch() 中的 [[Scopes]] 是啥
Posted
技术标签:
【中文标题】redux 的 dispatch() 中的 [[Scopes]] 是啥【英文标题】:What is [[Scopes]] in dispatch() of reduxredux 的 dispatch() 中的 [[Scopes]] 是什么 【发布时间】:2018-01-12 09:20:07 【问题描述】:我正在使用带有 react 的 redux。这使得 dispatch 可以作为组件中的 props 使用。所以当我console.log(this.props)
我在调度键下的日志中看到以下对象。
[[Scopes]]: Scopes[5]
0:Closure
1:Closure
2:Closure (createThunkMiddleware)
3:Closure
4:Global
有人能解释一下这是什么吗?
【问题讨论】:
一个很奇怪的输出? 完整日志dispatch: function (action) arguments: (...) caller: (...) length:1 name: "" prototype: Object __proto__:function () [[FunctionLocation]] : index.js?f248:9 [[Scopes]]: Scopes[5] errorText:undefined
我不明白这个问题 :-) 你没有 dispatch in props 吗?
是的,我有..就是这样。它工作正常..我只想知道这个日志的含义是什么。什么是 [[Scopes]] 及其闭包。
【参考方案1】:
[[Scopes]]
是 Chrome 开发工具在 C++ 中添加和内部使用的私有属性,here in the source。它显示函数范围内的变量,即可以从该函数访问哪些变量。
例如:
function a()
var foo = 'foo';
var obj =
bar: function ()
return foo;
;
console.log(obj);
a();
在这里,附加到属性obj.bar
的函数在其范围内具有变量foo
,因此当我们检查obj.bar
的[[Scopes]]
属性时,我们会看到类似
[[Scopes]]: Scopes[2]
0: Closure (a)
foo: "foo"
1: Global
(all global variables)
您可以在控制台中手动检查这些属性,这可能有助于调试,但您无法使用 javascript 访问它们,并且您不应该在应用程序代码中关心它们。
另请参阅:SO - Access function location programmatically。
【讨论】:
以上是关于redux 的 dispatch() 中的 [[Scopes]] 是啥的主要内容,如果未能解决你的问题,请参考以下文章
为啥 redux-saga 使用 put 方法而不是 dispatch?
“你不能把(又名 saga 中的 dispatch)冻结动作”——Redux Saga
访问 saga 中的 store.dispatch 以与 react router redux 一起使用