深入JS函数
一、函数声明
1、声明方式
1.1 function函数
function fn() {
console.log("hello");
}
fn(); //hello
1.2 函数表达式
var fn = function(num){
num = num + 1;
return num;
};
console.log(fn(1)); //2
1.3 构造函数
var Fn = new Function("a","b","return a+b;");
console.log(Fn(2,3)); //5
2、重复声明
重复声明时,后面的函数会覆盖掉前面的函数。
二、第一等公民
2.1 js认为函数和其他对象地位相等,都可以作为直接值来使用。
2.2 属性
(1)length :函数声明时定义的参数的个数。
(2)protopyte :函数的原型
2.3 调用方法
命名函数 :直接调用
function fn(){
console.log("hello");
}
fn();
匿名函数 :使用*函数本体()*调用
function(){
console.log("hello");
}();
递归调用
function fn(num){
if(num <= 1){return 1;}
return num * fn(num-1);
}
构造函数 :使用*new函数()*调用
function fn(){ }
console.log(fn()); //undefined
console.log(new fn()); // fn { }
间接调用 :使用*函数名.call()或者函数名.apply()*调用
function name(m,n){
return m-n;
}
var result1 = name.call(window,4,2);
var result2 = name.apply(window,[4,2]);
console.log(result1);
console.log(result2);
三、arguments对象
(1)arguements对象参数属于类数组;
(2)arguements对象只有在函数体内部可以使用;
(3)通过arguements.length,获得函数被传入几个参数;
(4)没有传递值得命名参数将自动被赋予undefined值;
(5)callee属性,返回对应的原函数。