一、Function
函数是对象,函数名是指针。
函数名实际上是一个指向函数对象的指针。
使用不带圆括号的函数名是访问函数指针,并非调用函数。
函数的名字仅仅是一个包含指针的变量而已。即使在不同的环境中执行,全局的sayColor()函数 与 obj.sayColor() 指向的仍是同一个函数。
在函数内部,有两个特殊的对象,this 和 arguments 。
以下 总结自 《高程三 P110 》
每个函数都是Function类型的实例,函数都是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。
函数表达式:
1 var foo = function () { // 函数表达式, 以上代码定义了变量sum,并将其初始化一个函数 这和声明 数字、布尔值、字符串等其他变量是一样的 2 ... 3 };
函数声明:
1 function foo() { 2 alert('foo'); 3 }
函数声明、函数表达式 区别:
解析器(代码运行的环境)会率先读取函数声明,并使其在执行任何代码之前可以访问;至于函数表达式,必须等到解析器执行到它所在的代码行,才会真正被解释执行。
document.onmousemove 默认是指向一个空的处理函数,如果想要自定义该事件的处理函数,就给它覆盖一个自定义函数的指针,也就是JS函数名(即document.onmousemover=functionname),而不能使用document.onmousemover=functionname()。
二、arguments对象
The arguments
object is an Array
-like object(类数组,没有pop push方法) corresponding to the arguments passed to a function.
The arguments
object is a local variable available(任何函数内部都有这个对象,是访问参数的入口) within all(non-arrow非箭头函数) functions. You can refer to a function's arguments within the function by using the arguments
object. This object contains an entry for each argument passed to the function, the first entry's index starting at 0.
arguments是函数内部的类数组对象,包含着传入函数中的所有参数,代表传递给函数的参数列表。
arguments
对象仅在函数内部有效,在函数外部调用 arguments 对象会出现一个错误
arguments对象有下面两个属性和一个不再被支持的属性。
1. callee属性
(arguments对象,不是函数对象的属性)是一个指针,指向拥有这个arguments对象的函数。
callee放回正在执行的函数本身的引用,它是arguments的一个属性。
Reference to the currently executing function(指向当前正在运行的函数).
2. length属性
argument.length 指向传递给当前函数的参数数量(即实参的数量)
三、caller属性
caller(是函数对象的属性)返回一个函数的引用,这个函数调用了当前的函数。
Reference to the function that invoked(指向调用当前函数的函数) the currently executing function.
四、length
每个函数都包含两个属性:prototype和length.
length(length属性) 是函数对象的一个属性值,指明该函数期望多少个参数,意即形参的个数
(length
是函数对象的一个属性值,指明该函数期望多少个参数,意即形参的个数。数量不包括剩余参数。相比之下, arguments.length
是函数被调用时实际传参的个数。)
五、return
return语句也可以不带有任何返回值,在这种情况下,函数在停止执行后将返回undefined
return 不指定明确的值时,返回undefined