JavaScript 函数
函数的声明
1、函数的声明或声明式函数
function test() {
方法体;
}
2、函数表达式
var test = function() {
方法体;
};
3、对象式函数
var test = new Function();
解析式先找到var和function定义的,再从上往下执行。
函数的声明在解析的时候就已经声明了;而函数表达式是再执行后再赋值。
2.函数参数与return语句
function add(x , y){ //其中x,y是形式参数
return x + y; //没有返回值时返回undefine
}
var sum = add(1 , 2);
console.log(sum);
3.匿名函数
function() {
}
没有方法名称,只能调用一次,作用是增加作用域。
function operator(fn) {
return fn;
}
可以返回函数,形参也可以传入函数。
调用:(function() {
} ());
4.作用域
1、允许访问的范围,分为全局和局部,函数是局部的。
2、var定义的是局部变量。
3、function fn1(){
var a = 2;
fn();
}
fn1(); //fn1()调用fn(),输出1
函数内部使用到的函数在函数声明时,已经确定了它的作用域。
4、外部不能够访问函数体内部,内部可以访问外部。
5、第一等公民和函数的提升
函数与数据其他类型同等地位,为第一等公民。
提升只会针对声明式,表达式函数只会在赋值的时候将值赋给变量
6、参数的传递
1、var x = 1, y = 2;
function fn(x,y){ //值传递
x = 2;
y = 3;
}
fn(x,y);
console.log(x + " " + y); //输出 1 2
2、 var arr =[1,2,3];
function fn(arr){ //"arr"为形参
arr[0] = 4; //址传递
arr[1] = 5;
arr[2] = 6;
}
fn(arr);
console.log(arr); //此时输出值为[4,5,6]
3、 var arr = [1,2,3]; //值传递
function fn(arr){
arr = [4,5,6];
}
fn(arr);
console.log(arr); //此时输出值为[1,2,3]
针对原始数据类型,值传递到方法内部进行计算。
针对引用类型,址传递方式。
8.可变参数的函数(arguments)
函数的arguments是返回一个数组,它包含了传递给当前执行函数的每个参数,arguments的整个长度由arguments.length来指定。
通过arguments的属性,函数可以很好的处理可变数量的参数。其表现形式和数组一样,不是数值。
通常情况下,函数里的变量会在执行结束后销毁掉。
function fn(x,y){
console.log(arguments);
}