JavaScript - 函数作为对象

标签 javascript function object

如果我能理解以下问题,那么函数在 JavaScript 中是对象的概念对我来说是可以接受的。我四处搜索并查看了 javascript 引擎以尝试找到答案,但到目前为止我没有找到任何解释......

像下面这样的对象可以理解地放置在 HashMap 类型的构造中。

var person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

但是,说这也是一个对象是我陷入困境的地方:

var name = function () {
    alert ('name');
}
  1. 在内存方面,这个函数是怎么存储的?

  2. 函数的“ HashMap ”中的语句是否按执行顺序排列?所以每个属性都是在另一个属性之后调用的?

我可能遗漏了某些东西或想象出了错误的东西。

谢谢。

附言

为了解决问题 2,

假设我的函数中有一个 if 语句...它会存储在可通过其属性之一访问的属性中吗?

最佳答案

javascript 中的每个对象都有属性(由字符串或符号标识的键值对)并且它有 internal slots

函数对象 name 以与 person 对象相同的格式存储,但它们的内部插槽不同。

  • person 的属性是 firstNamelastNameageeyeColor , 每个都持有各自的原始值
  • person 的内部插槽是(除其他外):

    • [[prototype]],指向Object.prototype
  • name 的属性是 nameprototypelength(典型值为 Function instances)

  • name 的内部插槽是(除其他外):
    • [[prototype]],指向Function.prototype
    • [[ECMAScriptCode]],指向函数的代码
    • [[Environment]],指向创建闭包的范围

免责声明:这只是它的行为方式,引擎可以根据需要实现它。尽管如此,它仍然可以很好地用作心智模型,并且重要的是要了解对象在公开可见的属性之下有一层。

关于JavaScript - 函数作为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761476/

相关文章:

javascript - 多次调用 api 时,AJAX 请求有时会被取消

c - 函数只显示一列平均值..?

C++ - 轻松管理潜在的无限实例(例如项目符号)

javascript - JavaScript 中的美化函数

javascript - 为什么 fetch 函数说,即使我设置了代理,我也必须使用绝对 url?

javascript - 如何在 javascript 中找到 "prototype"值?

javascript - 按最小长度、最大长度、电子邮件、数字、必需等方式验证表格。angular 2

java - DOS 子字符串和变量

javascript - 在函数内调用函数表达式... JavaScript

java - 创建String对象时创建了多少个对象