gpt4 book ai didi

javascript - 为什么 Function.toString 会这样工作?

转载 作者:行者123 更新时间:2023-11-29 16:30:52 24 4
gpt4 key购买 nike

该对象仅用于测试:

const item = {
id: 520,
name: 'Item 520',
props: [
{id: 1, name: 'Prop 1'},
{id: 2, name: 'Prop 2'}
]
}

此函数将属性 id 作为参数,并返回从传递给它的项目中获取具有该 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

它使用的变量是否存储在其中的某个位置?如果是这样,我可以在不调用函数的情况下访问它们,就像我可以访问其代码一样吗?

最佳答案

一般来说,对任何给定对象调用 toString() 的结果只是返回一个有用的字符串表示形式,主要用于调试。它应该可以帮助您理解它的作用。

明确定义toString()的目的是为您提供对象状态的完整图片。

例如,getItempropWithId1 确实会执行其 toString() 上显示的代码(即该代码是其部分状态/内容),但这还不是全部。除了该代码之外,还有 a closure包含 propId 的值(在本例中为 1)。由于某种原因,toString() 的作者选择不在 toString() 输出中包含该闭包(大概是因为该闭包可能非常庞大,并且可能包含数千个任意大的对象将使平均 toString() 结果无用)。

没有通用的方法可以直接访问闭包中的值。一些调试器会显示它,但您的代码几乎无法访问它们。

tl;dr toString() 显示的代码只是定义对象的一部分

关于javascript - 为什么 Function.toString 会这样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57903230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com