微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【JavaScript面向对象精要】2-函数

  函数其实就是对象。使函数不同于其他对象的决定性特点是函数存在一个被称为[[call]]的内部属性。内部属性无法通过代码访问,而定义了代码执行时的行为。ECMAScript为JavaScript的对象定义了多种内部属性,这种内部属性都用了双重中括号来标注。
  [[call]]属性函数独有的,表明该对象可以被执行。由于仅函数拥有该属性,ECMAScript定义typeof操作符对任何具有[[call]]属性的对象返回function。这一点在过去导致了一些问题,因为某些浏览器曾经在正则表达式中也包含[[call]]属性,导致后者被错误的鉴别为函数(现在大部分已经修复)。

函数声明、函数表达式

  函数声明会被提升至上下文(要么是函数被声明时所在的函数范围,要么是全局范围)的顶部,这意味的你可以先使用函数,后声明他们。

函数就是值

  你可以像使用对象一样去使用函数,也可以将他们赋值给变量,在对象中添加他们,将他们当成参数传给别的函数,或从别的函数中返回。基本上,可以使用其他引用值的地方都可以使用函数

参数

  函数参数实际上被保存在一个被称为arguments的类数组的对象中。arguments可以自由增长来包含任意个数的的值,这些值可以根据数字索引来引用。argumentslength属性会告诉你目前的有多少个参数值。(PS:arguments对象不是一个数组实例,其拥有的方法与数组不同。Array.isArray(arguments)永远返回false)另:函数期望的参数的个数保存在函数length属性中。

重载

  JS中没哟重载。实际使用中是根据arguments来控制决定调用函数的哪个部分或者版本来执行。

总结

  JavaScript中函数的独特之处在于他们同时也是对象,也就是说他们可以被访问、复制和覆盖,就像其他对象一样。JavaScript中的函数和其他对象最大的区别就是他们有一个特殊的内部属性[[call]]包含了改函数的执行指令。typeof操作符会在对象内查找这个内部属性,如果找到则返回function
  函数的字面形式有两种:声明和表达式。声明会被提升至上下文的顶部。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐