javascript学习之函数对象简介

只是简单的罗列出来,后续会加深学习并补充完整。

函数对象的主要知识点

  • 函数的基本概念
  • 函数声明
  • 函数表达式
    • 函数表达式
    • 闭包
  • 函数的属性和方法
  • 函数表达式

函数的基本概念

1.介绍

  • 函数是一个对象,函数名是指针
  • 使用不带括号的函数名就是访问指针

2.参数

  • arguments对象来保存参数,且参数个数不受限制,可以调用。
  • arguments不是数组,只是类似物。

3.没有重载

  • 函数没有定义签名

函数声明和函数表达式

  • 函数解析器先读取函数声明,并可以在执行任何代码前就可以 访问。函数声明提升。
  • 函数表达式就必须等解析器执行到它所在的代码才会执行。必须先赋值再使用。
  • 函数可以作为值,然后镶嵌使用。

函数的内部属性

  • arguments
    • callee属性,是一个指针,执行拥有这个arguments对象的函数。
  • this:引用的是函数据以执行的环境对象。
  • caller:保存着调用当前函数的引用。不常用,早期opera不支持。

函数的属性和方法

1.属性:

  • length:表示接受的参数的个数
  • prototype:保存他们所有的实例方法,不可枚举的。重要!!!

2.方法:

  • apply( )在特定的作用域中调用函数。第一个参数是运行的作用域;第二个参数数组,数组/arguments对象。
  • call( )与apply相似。接受参数的方式不同。后面的参数项必须全部罗列出来。
  • 以上两者的还有一个作用就是扩展作用域。、
  • bind( )创建一个函数实例,其this的值会被绑定到传给bind( )函数的值。

函数表达式

1.函数递归:一个函数通过自身的名字调用函数。

  • 通过arguments.callee来实现。不做重点。

2.闭包:重点中的重点。虽然我现在还用的少!

  • 概念:有权访问另一个函数作用域中的变量。
  • 创建方法:在一个函数内部再建一个函数。
  • 理解闭包
    • 在函数的内部会将在其内包含的函数的活动对象添加到它的作用域链中。
    • 闭包会占用过多的内存,所以要谨慎使用。
  • 闭包与变量
    • 闭包只能取到包含函数中任何变量的最后一个值。P181
  • 关于this,一般把this保存在闭包可以访问到的变量。
  • 内存泄露问题

3.模仿块级作用域
js没有块级作用域的概念,所以对于for里面的声明的变量在函数内部也是可以读取的。对后续的声明无视,但是初始化值会执行。匿名函数模仿块级作用域(私有作用域)。

(function( ){
    //这里是模仿的块级作用域!
})( )

4.私有变量

  • 包括:参数、局部变量以及函数内部定义的其他函数。
  • 概念:在函数内部定义的变量,外部的函数无法访问的。
  • 利用闭包的特性创建访问私有变量的公有方法——特权方法。
    • 第一种就是在函数内部的定义函数。
    • 非重点 略
原文地址:https://www.cnblogs.com/hzhuang/p/4350092.html