js函数
函数介绍
什么是函数
函数就是将一堆代码进行重用的一种机制或者封装某种功能的代码段。
函数就是一段代码,这段代码可能有输入的值(参数),可能会有返回值。
一个函数就像一个专门做这件事的人,我们调用它来做一些事情,它可能需要我们提供一些数据给它,
它执行完成后可能会有一些执行结果给我们。需要的数据就叫参数,返回的执行结果就是返回值。
定义函数的方式
使用函数声明的方式来定义函数
function 函数名称([参数...]){
函数体;
}
函数名称(); // 函数只要调用就会回到函数声明的内部执行里面的代码
示例
例如:
function tellStory(){
console.log("从前有座山");
console.log("山里有座庙");
console.log("庙里有个老和尚");
console.log("在给小和尚讲故事");
console.log("讲的是什么呢?");
}
tellStory();// 调用函数
函数的三要素
-
函数名称
一般在函数的名称上就可以体现这个函数的功能,函数名一般是一个动词
-
参数
-
形参 定义函数时写在括号中的变量叫做形参,起占位置的作用,只能函数内部使用
-
实参 调用函数时,传入的真正数据叫做实参,是一个真正的数据值
-
-
返回值
js中的函数特别奇葩,js中的函数只要调用就会有返回值(包含undefined)
-
如果函数没有显示的使用 return语句 ,那么函数会有默认的返回值:undefined
-
如果函数使用 return语句,那么跟在return后面的值,就成了函数的返回值
-
如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined
-
函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说return后面的所有其他代码都不会再执行。
-
函数内部可以调用另外一个函数
示例
function f1(){
console.log('11111111111');
console.log('11111111111');
f2();
console.log('11111111111');
console.log('11111111111');
}
function f2(){
console.log('2222222222222');
console.log('2222222222222');
console.log('2222222222222');
console.log('2222222222222');
}
f1();
return关键字的用法
-
如果函数内部使用了return关键字,而且return后面跟着具体的数据,则return会先将数据返回,然后再跳出当前函数,return后面的代码不会再执行
-
如果函数内部使用了return关键字,但是return后面没有跟着具体的数据,则return会直接跳出函数,return后面的代码不会执行
-
也就说,如果有函数内部使用了return而且有具体的返回值,则return会先将数据返回,然后再跳出当前函数,如果没有具体的返回值,则return直接跳出函数
-
无论函数内部有没有数据需要返回,只要是有return关键字,最终都会跳出当前函数
定义函数的另一种方式
使用函数表达式的方式来定义一个函数,是将一个匿名函数存在一个变量当中
匿名函数多用于注册事件或定时器当中。
var fn = function(){
console.log('我是一个匿名函数,存在于一个变量fn当中')
}
fn();// fn就相当于是这个匿名函数的函数体
两种方式的区别
-
区别在于预解析,函数声明的方式定义的函数,在哪里都可以调用;
-
而函数表达式的方式定义的函数必须在函数表达式的后面才可以进行调用.
预解析
js里面有一个特殊的机制,叫预解析,就是在js真正的执行代码之前,会将所有的js代码先扫描一遍,将代码中函数的声明,和变量的声明提升到当前作用域的最前面,而变量的赋值还是在原位置进行,这个过程就是预解析的过程,此我程我们看不到。
作用域
作用域可以理解为数据的使用范围。
全局作用域:
一对script标签之间就是一个全局作用域
-
全局作用域不可以访问局作用域中的数据
-
在全局作用域使用var声明的变量或在函数内部不使用var声明的变量,都是全局变量。
局部作用域:
函数大括号内部就是一个局部作用域
-
局部作用域可以访问全局使用域中的数据
-
在函数内部使用var声明的变量就是局部变量。
块级作用域 :
在其它语言中,任何一对花括号中的语句都属于一个块,在这之中定义的所有变量在代码块外都是不可见的 JavaScript中没有块级作用域.
全局变量:
定义在页面中一对script标签之间或者不属于某个函数的变量.
在函数内部不使用var 声明的变量.
局部变量:
在函数内部使用var声明的变量
其它:
函数内部可以访问到该函数所属的外部作用域的变量(作用域链) 不使用var声明的变量是全局变量,不推荐使用。 变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁。
回调函数
把函数当做参数来传递,这样的函数称为回调函数
var f1 = function(){
console.log('123')
}
function f2(fn){
fn(); // 调用传进来的函数
}
f2(f1);// 此时f1就是一个回调函数
匿名函数
**定义: **
没有名字的函数就称为匿名函数
作用:
一般用于绑定事件或是定时器当中
例:
var fn = function(){
console.log(123);
}
setTimeout(function(){
console.log(456);
},1000)