简述
函数是一个对象,函数名是一个指针,每个函数都是Function类型的实例;
也可以这样理解函数:在特定环境下执行代码的对象。
定义方式
函数声明
function fun1(){
console.log('fun1');
}
函数表达式
var fun2 = function(){ console.log('fun2'); }
自执行函数
(function(){ console.log('fun3') })
Function构造函数(不推荐)
tip:
(1)函数声明与函数表达式的区别:
解析器会率先读取函数声明,使它在代码执行之前可用;这里牵涉到一个概念叫函数声明提升;
函数表达式则必须等到解析器执行到它所在的代码行才会真正的被解释执行。
函数的内部属性
arguments
主要用来保存函数参数;
该对象又一个callee的属性,它是一个指针,指向拥有这个arguments对象的函数;
callee的主要用途:实现递归,消除函数内的代码与函数名的冲突;
通过Array.prototype.slice(arguments, 0)来实现arguments转换为Array对象
this
length
prototype
函数的调用
普通函数调用
构造函数调用
作为某个对象的方法调用
call,apply间接调用