函数允许我们封装一系列代码来完成特定任务。当想要完成某一任务时,只需要调用相应的代码即可。方法(method)一般为定义在对象中的函数。浏览器为我们提供了很多内置方法,我们不需要编写代码,只需要调用方法即可完成特定功能。在构造函数时,最好将首字母大写,函数其实也是一个对象。
创建
- 函数字面量
- var say=function(){}
- 函数的声明
- function say(){}
- 解析时,先解析函数的声明,在解析使用var操作符声明的变量,但不赋值。
- 匿名函数
- function (){} 需要立即执行(function ()){}()
函数的调用
- 函数名(参数)
- new 函数名():new调用的函数为构造函数
函数的参数
- 形式参数(形参)
- 实际参数(实参)
- function say(a,b){ console.log(a+b) ;} a,b为形参
- say (1,2) 1,2 为实参可以和 实际参数个数不一致
- js中没有重载概念,只要函数名相同,即为重写

函数的内部属性
1)只有在函数内部才能访问的属性。
2)arguments:类数组对象,用来保存当前拥有arguments对象的函数的实际参数列表,length属性表示实际参数的个数,callee属性表示从函数内部指向当前函数(类数组对象)
[1,2,3,4]数组的下标,从0开始
function say(a,b){
//1.var a ;var b; 2. 1-->arguments[0] 2-->arguments[1] 3--->arguments[2] 3.arguments[0]-->a arguments[1]--->b
}
say(1,2,3);


计算1!+2!+3!...+10!
var result=0;
for (var i=1;i<=10;i++){
result+=sum(i)
}
3)this: 是函数赖以生存的环境对象
this何时确定:当拥有当前this的函数被调用时确定
谁调用当前拥有this的函数值,那么this就指向谁

var o={
2 name:'text',
3 gender:'men'
1 var o={
2 name:'text',
3 gender:'men'
4 }
5 var age=10;
6 function say(){
7 var age=20;
1 var o={
2 name:'text',
5 var age=10;
6 function say(){
7 var age=20;
1 var o={
2 name:'text',
5 var age=10;
6 function say(){//1001
7 var age=20;
8 console.log(this.age);
9 }
1 var o={
2 name:'text',
3 gender:'men'
4 }
5 var age=10;
6 function say(){//1001
7 var age=20;
8 console.log(this.age);
9 }
10 var o={
11 name:'lisi',
12 gender:'men',
2 name:'text',
3 gender:'men'
4 }
5 var age=10;
6 function say(){//1001
7 var age=20;
8 console.log(this.age);
9 }
10 var o={
11 name:'lisi',
12 gender:'men',
13 age:30,
14 say:say,//1001
15 getSay:function(fn){//fn:1001
16 fn()//this-->window:10
17 },
18 sayHello:function(){
19 console.log(this.age);//30
20 return function(){
21 return this.age
22 }
23 }
24 }
25 //1.say()
26 say();//window.say();this--->windoow:10
27 //2.o.say()
28 o.say();//this-->o:30
29 //3.o.getSay();
30 o.getSay(say);//this-->window:10
31 //4.o.sayHello()
32 console.log(o.sayHello()());//this-->window:10
作为值的函数和作为返回值的函数
1.作为值的函数
由于函数名本身就是变量,所以函数可以当做值来使用(参数,返回值)。

2.作为返回值的函数

函数的属性
say.length:返回形式参数的个数

调用函数:
修改了函数内部this值的指向
say.call(this,实际参数列表)


say.apply(this,[实际参数列表])
