【问题标题】:Is JavaScript function a "function" or an "object" or both?JavaScript 函数是“函数”还是“对象”或两者兼而有之?
【发布时间】:2010-10-15 16:21:38
【问题描述】:

我试图弄清楚 Javascript 函数的行为方式。它是一个函数还是一个对象或两者兼而有之?

【问题讨论】:

标签: javascript


【解决方案1】:

javascript 中的函数是一流的对象。所以它们既是函数又是对象。

因为它们是第一类对象,你可以将一个变量分配给一个函数并赋予它属性,例如:

var addName=function(){}; 
addName.blah = 1;

如果它们不是一流的对象,您将受限于这种语法,但您可以同时使用两种方法:

function addName(){}

【讨论】:

  • 没有“差不多”。它们是函数和对象。
  • @Chad:没有+1。 +1 将包括link explaining what "first class" means,因为人们喜欢在这里到处乱扔这个词。或者更好的是,说函数是一等对象而不使用术语“一等”(即以普通人会理解的方式解释它:“是的,Javascript 允许您将函数分配给变量并调用变量.. ")
【解决方案2】:

两者兼而有之。

一切在 Javascript 中都是“数据”,包括函数。我觉得这是一种很好的描绘方式:

var f = function() { alert('foo'); };

这是对变量的赋值,与你写的没有什么不同,比如:

var f = new String('foo');

无论哪种方式,您都可以编写类似f.bar = 'baz'; 的语句来为您的对象分配属性。唯一的区别是() 运算符(如果您愿意的话)仅在您拥有的变量恰好是一个函数时才有效。 f() 如果是函数,则有意义; f() 如果是字符串或其他数据,则毫无意义。

【讨论】:

  • -1 表达式语句(即赋值)应以分号结束。
  • @Šime Vidas:伙计,一定要发表评论,但对于 A) 偏离主题和 B) 语言允许 (即使依赖它是一个非常非常糟糕的主意)?
  • 另外,您不能将属性分配给包含原始值的变量。
  • @Šime Vidas:我不是 VoteyDisciple。
  • 你可以做var f = "foo"; f.bar = 4;。发生的情况是f.bar 中的f 被转换为String,然后分配其bar 属性,然后转换后的String 值丢失,因为没有任何引用它。但你可以做到 =)
【解决方案3】:

在 JavaScript 中,所有函数都是对象。

函数是可以调用的对象。 (它们有一个内部 [[Call]] 属性)

【讨论】:

    【解决方案4】:

    好吧,我不会说“JavaScript 函数是一流的对象”,因为每个人都已经说过了,但是如果您想了解更多关于函数的信息,请查看这个简短的页面:

    http://jqfundamentals.com/book/ch02s09.html

    顺便说一句,如果您打算学习 JavaScript 和 JQuery,那是一本免费的在线书籍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 2011-09-26
      • 1970-01-01
      • 2016-09-22
      • 2014-07-20
      • 1970-01-01
      相关资源
      最近更新 更多