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 一起使用

redux store dispatch 导致 React 中的 setState error()

redux dispatch 多次触发

如何在TypeScript中实现redux中间件类