函数就是包裹在大括号中的代码块,前面使用了关键词 function:
一、函数的声明
函数的声明我们声明一个求数字立方的函数,函数在定义之后,并不会执行里面的内容,只有在函数进行调用的时候,才会执行。
// 定义一个求一个数字的立方的函数,并调用
function cube(a) {
return a * a * a;
}
var res = cube(3);
1、函数表达式
函数表达式,即用变量保存匿名函数。上面的式子就是一个函数表达式,其中从function后面一直到反大括号包裹的内容称为函数体,cube被称之为函数名,a就是函数的参数,return后面的内容称之为返回值。我们只要调用上面的函数就可以求出任何一个数的立方。
二、函数的参数和返回值
1、函数的参数。
观察上面的函数表达式我们会发现函数名括号内有一个a,这个a就是称之为函数的参数。参数类型分为两种:一种叫显示参数也叫形参,是我们在定义的时候写的参数,如上面的a即为形参;另一种叫隐藏参数也叫实参,是函数在调用的时候用的值,如上面函数调用时函数名后面括号内的3即为实参。
函数的参数一般写在函数名后面的小括号内,如果不写参数默认是undefined,函数的参数可以是一个,也可以是多个,当我们不知道到底有多少个参数的时候可以使用arguments 关键字,它表示函数中所有参数组成的数组。
2、函数的返回值(return)。
另外我们查看上面的函数表达使会发现有一个return关键字后面跟着a ×a × a,这就是函数的返回值。我们将参数a传入函数内,再返回三个a的乘积,函数调用时我们就可以通过参数返回我们想要的结果。所以有时,我们会希望函数将值返回调用它的地方。通过使用 return 语句就可以实现。在使用 return 语句时,return 语句后的代码都不会被执行,并返回指定的值。函数调用将被返回值取代,当然也不是所有的函数都需要返回值,我们可以根据需求选择是否添加返回值。
function fun(a) {
console.log(a);
}
fun('我是一个没有返回值的函数')
// 函数有多个参数
function func5(a, b) {
var res = a + b;
return res;
}
var res3 = func5(12, 34);
console.log(res3);
// 函数内部使用 arguments 关键字
function func6() {
// 求出所有参数的和,并返回
var res = 0;
for (var i = 0; i < arguments.length; i++) {
res += arguments[i];
}
return res;
}
console.log(func6(1, 2, 3, 4, 5, 6));
代码执行效果
三、函数的调用
1、函数的调用方式
声明函数后如果没有调用,函数表达式里面的代码是不会执行的函数的调用有两种方法:一种是直接编写函数名后面紧跟小括号,如上面我们求立方的函数我们只用这么写cube(3),即可调用求出3的立方;第二种是直接调用也叫自调用函数,其语法就是写两个小括号,我们把函数写在第一个小括号内,函数运行时它会直接运行函数里面的代码。
(function () {
console.log('我是一个自调用函数');
})();
(function test() {
console.log('我是另外一个自调用函数');
})();
// 自调用函数特点:函数自己执行,不需要进行调用
// 自调用函数,如果有参数会怎么样?
(function (a, b) {
console.log(a, b);
})(12, 35);
代码执行效果
2、匿名函数
上面的函数就是一个自调用函数,我们会发现上面的函数没有函数名,像这种函数就被称之为匿名函数,我们当然也可以给他加上函数名,但是这并没有什么卵用。注意给它的参数不是写在function后面的小括号内,而是写在函数体后面的小括号中。
3、函数的调用顺序
我们在声明变量的时候会在变量前面加一个var关键字,我们在声明函数的时候也可以声明一个变量来接收函数表达式。我们都知道变量在声明之前调用会报错显示undefined,如果函数在声明之前调用会不会报错呢,我们可以看以下代码:
fun(10)
function fun(a) {
console.log(a);
}
add(2,4);
var add = function (a, b) {
return console.log(a+b);
}
代码执行效果
fun(10)
function fun(a) {
console.log(a);
}
var add = function (a, b) {
return console.log(a+b);
}
add(2,4);
Paste_Image.png
从上面的代码我们可以看出,当我们用变量接收函数表达式的时候只能在函数声明后调用;当我们不用变量接收函数表达式的时候,即使是在函数声明之前我们也可以调用,一定要注意二者之间的区别。
四、函数的封装和闭包
JavaScript允许在函数内部嵌套函数---即函数定义和函数表达 式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包,闭包主要就是防止变量污染,下面这段代码就是一个简单的闭包。
var add = (function(){
var count = 0;
return function () {
count ++;
console.log(count);
}
})()
add();
函数封装就是将一段实现同一个效果的代码放在一个函数表达式内,这样方便多次调用也可以防止变量污染,比如我们想要取一定范围内的随机数,就可以封装一个函数,代码如下:
//封装涵数获取随机数
function random (min, max) {
return parseInt(Math.random() * (max - min + 1) + min);
}
// 封装函数求出圆的面积
function circleArea(r) {
return Math.PI * r * r;
}
console.log(circleArea(10));
五、浏览器嗅探
可以获取浏览器内核、浏览器、操作系统版本等信息。
- window.navigator.userAgent
以上内容纯属个人理解,由于水平有限,若有错漏之处敬请指出斧正,小弟不胜感激。
网友评论