如何绑定`this`和关闭变量?

时间:2017-01-09 17:16:30

标签: javascript

是否可以从函数中获取与this和所有已关闭变量绑定的内容?

e.g。

 function f() { console.log(this); }
 let x = f.bind(7);
 function g() { console.log(x); }
  1. 是否可以从7中提取x

  2. g关闭x。是否可以从g

  3. 获取一系列已关闭的变量

1 个答案:

答案 0 :(得分:9)

  

是否可以从7中提取x

不。 f必须明确地为您提供检索this的方法(例如,function f() { return this; })。既然没有,你就不能。

在规范术语中,您要问是否可以从函数中检索[[BoundThis]]内部插槽的值。 [[BoundThis]]仅在规范中出现三次:其中描述了bound function exotic objects,描述了[[Call]] internal operation的位置,以及process of creating them的概述位置。因此,不是在允许您检索值的操作中。

  

g关闭x。是否可以从g获得一系列已结束的变量?

不。 :-)在拥有私人信息和公共API方面,这是一件好事。

提供这种方法需要一种方法来访问附加到g及其所有外部词汇环境的lexical environment对象中的绑定列表。规范中没有。

没有规范的原因,其中一个或两个都无法添加,但我认为(这只是我的个人推测)TC39(决定这些事情的委员会)将是一个难以出售的在第一个和几乎不可能的第二个出售(具有大量的,负面的,实施影响)。