深入js函数

深入js函数

  • 一、函数定义
  • 二、函数声明
    • 1. 声明方式
      • 1.1 function函数
      • 1.2 function函数表达式
      • 1.3 Function构造函数
    • 2. 重复声明
  • 三、函数地位
    • 1. 第一等公民
    • 2. 函数传递
    • 3. 函数属性
  • 四、函数调用
    • 1. 普通函数调用
      • 1.1 取名函数
      • 1.2 匿名函数
      • 1.3 递归调用
    • 2. 对象方法的调用
    • 3. 构造函数的调用
    • 4. 间接调用
  • 五、函数的参数
  • 六、函数的返回值

一、函数定义

  • 可重复执行的代码块
  • 内部可封装大量语句
  • 可以在任何地方调用
  • 函数主题在定义时不执行,仅在调用时执行

二、函数声明

1. 声明方式

1.1 function函数

function fn(){
	console.log("hello"); //函数执行体
}
fn(); //"hello"

由function声明的函数具有函数提升的效果

1.2 function函数表达式

var fn = function(value){  //表达式传入参数
	value=value+1;
	return value;  //函数返回值
};
console.log(fn(2)); //3

函数表达式不具备函数提升的效果

1.3 Function构造函数

var Fn = new Function("a","b","return a-b;"); //传入参数和方法体
console.log(Fn(3,1));  //2

构造函数不具备函数提升的效果
构造函数可以不使用new命令,返回结果一样

2. 重复声明

重复声明函数时,后面的函数会覆盖前面的函数

三、函数地位

1. 第一等公民

js中函数可以看成是一种值,地位与数值、布尔值等相同

2. 函数传递

  • 函数可以赋值给变量和对象的属性
  • 函数可以当做参数传递给其他函数
  • 函数可以作为返回值

3. 函数属性

  • length 定义函数时形式参数的长度
  • prototype 函数原型

四、函数调用

1. 普通函数调用

1.1 取名函数

function fn(){
	console.log("hello"); 
}
fn(); //"hello"

直接使用 函数名( ) 调用

1.2 匿名函数

!function(){
	console.log("hello"); 
}();

使用函数本体( ) 调用,注意函数存在函数提升,需要使用! () +等字符避免函数提升的效果

1.3 递归调用

function fn(num){
	if(num <= 1){return 1;}
	return num * fn(num-1);  //调用本身
}

每次函数调用本身,以此来代替循环执行的效果

2. 对象方法的调用

var obj={
	a:function(){console.log("hello")};
	0:function(){console.log("world")};
	0a:function(){console.log("welcome")};
};
obj.a(); //hello
obj[0]();  //world
obj["0a"]();  //welcome

对于符合变量定义规则的可以直接使用对象.方法( ) 调用
其他只能使用对象[" "]( ) 调用

3. 构造函数的调用

使用new命令 函数 调用

function fn(){ }
console.log(fn());  //undefined
console.log(new fn()); // fn { }

4. 间接调用

function name(m,n){ 
	return m-n;
}
var result1 = name.call(window,3,1);
var result2 = name.apply(window,[3,1]);
console.log(result1);
console.log(result2);

使用函数名.call(作用域对象,参数值) 调用
使用函数名.apply(作用域对象,参数数组) 调用

五、函数的参数

arguments对象

  • 用于获取传递给函数的每个参数 arguments[ ],属于类数组
  • 没有参数传入时,默认值参数值为undefined
  • length属性,代表传入参数的长度
  • callee属性,代表函数体本身,多用于递归调用中

六、函数的返回值

  • 返回值可以是任意类型
  • 返回值可以执行相应的语句,也可以单独使用用于终止函数
  • 没有返回值的函数默认为undefined

你可能感兴趣的:(javascript)