此对象仅用于测试:const item = { id: 520, name: 'Item 520', props: [ {id: 1, name: 'Prop 1'}, {id: 2, name: 'Prop 2'} ]}此函数将属性 id 作为参数,并返回函数,该函数从传递给它的 item 中获取具有该 id 的属性。const getItemPropById = propId => (item => item.props.find(p => p.id === propId))所以getItemPropById(1)(item)评估{id: 1, name: "Prop 1"}为预期。getItemPropById.toString() 返回"propId => (item => item.props.find(p => p.id === propId))". 这里没什么奇怪的。现在,假设我想要一个返回 id 为 1 的属性的函数。const getItemPropWithId1 = getItemPropById(1)此功能将按预期工作,但是:getItemPropWithId1.toString() 返回"item => item.props.find(p => p.id === propId)"它并没有返回"item => item.props.find(p => p.id === 1)"因此,如果这是被执行的代码,如何getItemPropWithId1“知道”来代替propId用1,当它叫什么名字?它使用的变量是否存储在其中的某处?如果是这样,我可以在不调用函数的情况下访问它们,就像我可以访问它的代码一样吗?
2 回答
![?](http://img1.sycdn.imooc.com/5333a1d100010c2602000200-100-100.jpg)
慕哥6287543
TA贡献1831条经验 获得超10个赞
一般来说,调用toString()
任何给定对象的结果只是返回一个有用的字符串表示,主要用于调试。它应该可以帮助您了解它的作用。
什么toString()
是明确不定义做的就是给你一个完整的对象的状态的照片。
例如,它是真的,getItempropWithId1
将执行它显示了它的代码toString()
(即代码部分的状态/内容的),但是这还不是全部有。除了该代码之外,还有一个包含propId
(1,在本例中)的值的闭包。出于某种原因,作者toString()
选择不在toString()
输出中包含该闭包(大概是因为闭包可能非常庞大,并且可能包含数千个任意大的对象,这将使平均toString()
结果无用)。
没有通用的方法可以直接访问闭包中的值。一些调试器会显示它,但您的代码几乎无法访问它们。
TL;博士的代码toString()
示出了仅仅是部分的什么定义的对象。
![?](http://img1.sycdn.imooc.com/533e51f30001edf702000200-100-100.jpg)
aluckdog
TA贡献1847条经验 获得超7个赞
“它使用的变量是否存储在其中的某个地方?”
变量“存储”在propId
您在函数参数中定义的变量中(这是一个抽象,它实际上存储在内存位置中,并且实现细节特定于实现)。
如果是这样,我可以在不调用函数的情况下访问它们,就像我可以访问它的代码一样吗?
不。
添加回答
举报
0/150
提交
取消