函数是用于封装一段完成特定功能的代码,相当于将一条或者多条语句组成的代码块包裹起来。用户在使用时,只需关心参数和返回值,就能完成特定的功能。
function 函数名(参数1,参数2,.......){
//函数体
}
函数分为有参函数和无参函数
function greet(){
console.log('Hello body');
}
function greet(a,b){
a=parseInt(a);
b=parseInt(a);
return a>=b?a:b;
}
在Es6中还新增了含有默认值的参数
函数可以赋值给一个变量,赋值为对象的属性,作为参数传入别的函数,作为结果返回
调用:函数写完后。并不是立即执行的,想让他发货作用,那么需要调用这个函数。
函数名称(参数1,参数2,......)
变量的作用域:
变量的使用是需要先声明后使用的,而且变量的使用也是有范围的。这个范围被称为变量的作用域。
分为 3种(1)全局变量
(2)局部变量
(3)块级变量(Es6新增)、
此外还需要注意的是 当局部变量和全局变量重名是,局部变量的优先级高于全局变量。例
var a='one'
function test(){
var a='two'
console.log(a)
}
test();
for(let a=0;a<3;++a){
console.log(a);
}
console.log(a);
输出结果为:
two
0
1
2
one
匿名函数:
这个是没有函数名称的函数。将声明的函数赋值给一个变量。这种方法可以有效的避免全局变量的污染以及函数名的冲突。但是这种方法定义需要注意 函数定义必须在调用前
其中匿名函数有助于分为3种。如下:
var fun=function sum(num1,num2){
return num1+num2;
};
fn(2,4);
自调用函数:
(function (num1,num2){
return num1+num2;
})(1,2)
自调用函数也被称为立即执行函数,是函数表达式,不能是函数声明。创建一个独立的作用域,避免被同名变量覆盖
此外在处理事件的时候也可以用匿名函数。
回调函数:
回调函数指的是一个函数A作为参数传递给一个函数B,然后在B的函数体内调用函数A。函数A称为回调函数。
例:
function cal(num.num2,fn){
return fn(num1,num2);
}
console.log(cal(45,55,function(a,b){
return a+b;
}));
console.log(cal(10,20,function(a,b){
return a*b;
}));
嵌套与递归:
嵌套函数值得是在一个函数内部存在另外一个函数的声明。
特点:内层函数只能在外层函数作用域内执行,在内层函数执行的过程中,若需要引入某个变量,首先会在当前作用域中寻找,若未找到,则继续向上一层级的作用域中寻找,直到全局作用域,我们称这种链式的查询关系为作用域链。
递归函数:递归调用是函数嵌套调用中一种特殊的调用。它指的是一个函数在其函数体内调用自身的过程,这种函数称为递归函数。
递归函数在遍历不固定的多位数组是特别合适,但是他占用的内存和资源多,并且难以维护,所以在开发使用需要注意嘎不是的递归调用。
闭包函数:在JavaScript中,内嵌套函数定义在外层函数中的所有变量和函数,并包括其外层函数能访问的所有变量和函数。但是需要注意的是在函数外部是不能访问函数的内部变量和嵌套函数的。
特点:闭包类似于面向对象的数据隐藏和封装,所以在前面时候 JavaScript是支持面向对象的。