在JS这类解释性语言中 是不会输出引用类型的地址的
如  function test(){
var a = 1;
}
document.write(test);
//得到的结果就是test(){ var a = 1; }函数本身
定义
注意if的结构体中不能包含函数
1  函数声明
如  function test(){
}
2  函数表达式
2.1  命名函数表达式
如  var test = function abc(){
var a =1;
}
//此时函数名abc已经没有意义了  用abc();调用不到这个方法
//只有test();才能调用到这个方法
2.2  匿名函数表达式(常用)
上述可以简写为匿名的形式
如  var test = function (){
var a =1;
}
这两种写法的区别只是函数的名字不同
通过test.name  命名得到abc  匿名得到test
组成形式
1  函数名称
2  参数(可以没有)
写参数时不用写类型  其实际就会帮你var定义变量  如果写了类型会出错
所以直接  function test(a,b){ }  即可
此时函数test中的a,b即为形参
调用方法时传递进来的参数即为实参  如  test(1,2);
因为它会帮你定义变量  所以
2.1  形参个数可以比实参多  也可以比实参少
2.2  传进来的实参不管多少个  都会放进arguments中(可以理解为数组)  注意arguments只存储传递进来的实参
2.3  若改变了传递进来的实参  那么arguments也会发生改变
 若改变了arguments中存的数  那么传递进来的实参也会发生改变
 可以理解为二者存在映射关系  你变我也变
2.4  若想知道形参的长度  可以用  函数名.length  获取
如  function test(a,b){ }  test(1);
//即a的值为1  b为undefined  arguments中存有[1,2]
function test(a){ }  test(1,2);
//即a的值为1
function test(a,b){a = 2; arguments[0] = 3; }  test(1,2);
//先传值a为1  此时arguments中存有[1,2]  然后a值为2  此时arguments中存有[2,2]  然后a值为3  此时arguments中存有[3,2]
function test(a,b){ b = 2; }  test(1);
//先传值a为1  此时arguments中只存有[1]  然后b值为2  此时arguments中仍然为[1]  即arguments[1]为undefined
3  返回值return
有两个功能
1  函数执行到return终止
    没写return的函数  系统默认会在结尾加return
    如  function test(a,b){
console.log(‘a’);
return ;
console.log(‘b’);
    }
    //函数执行第一条语句后终止  console.log(‘b’);不执行
2  返回一个值
