gpt4 book ai didi

javascript - 函数对象在什么时候具有属性?

转载 作者:行者123 更新时间:2023-11-29 10:26:36 25 4
gpt4 key购买 nike

函数是一流的对象,它们的本地数据在某些时候似乎必须具有属性,但我对这种情况何时/如何发生感到困惑。

举个例子:

var output = function(x){
var s = "string";
delete s;
return s + " " + x;
};
console.log(output("bean"));

输出string bean。我不确定我是否希望它删除 s 我只是在胡闹,因为我认为全局声明的 var 成为窗口对象的属性。

我知道 delete 对局部变量不起作用,它只对对象属性起作用。因为函数是对象,所以我想知道函数中的本地数据在什么时候变成了“属性”

最佳答案

I'm wondering at what point does local data in a function become a "property"

事实并非如此。您将函数调用与与函数的普通类对象交互混淆了。

像所有对象一样,函数可以具有与之关联的任意键值属性,例如:

var fn = function(x){
// do something
// not important
};
fn.foo = 'foo';
console.log(fn.foo);

除非您像这样显式地为函数分配一个属性,否则函数将不会有除了函数通常具有的属性(如 .prototype)之外的属性。

不过,将这样的任意属性分配给一个函数是非常奇怪,并且在大多数情况下可能不应该这样做。

函数通常具有的其他属性是.name(命名的函数名),.length(指函数接受的参数个数)。

这与非对象基元形成对比,后者不能为它们分配键值对:

'use strict';
const someStr = 'foo';
someStr.bar = 'bar';

(尽管如此,当您尝试引用原语上的属性时,解释器会首先将其包装在适当的原型(prototype)中,从而将其转换为对象,以便原型(prototype)继承与其一起工作)

关于javascript - 函数对象在什么时候具有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57668122/

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