函数: 就时利用function声明的可以重复使用的代码块
函数的定义
语法
function 函数名(参数1, 参数2, ... , 参数3) {
// 需要执行的代码块
}
- function是一个关键字, 和var一样, 都是关键字,
- 函数名的命名规范和变量命名一样, 只能是字母、数字、下划线、美元符号, 不能以数字开头, 一般采用驼峰式命名大;
- 函数名后的()中放置函数形参, 形参可以为任意多个(意味着可以没有形参), 如有有多个形参用","隔开;
- 函数{}中就是需要执行的代码块。
函数的调用
函数名(实参1, 实参2, ... , 实参3);
- 函数名应和被调用的函数名保持一致;
- 实参和形参可以个数可以不用一一对应;
- 如:
function add(a, b) {
// return返回函数的返回值并结束函数运行
console.log(a);// 输出:10
console.log(b); // 输出:undefined
}
add(10);
再传值前所有的函数内的形参的值都是undefined,如果传了值就会覆盖原有的值
函数的运用
计算两个数的和
function add(a, b) {
// return返回函数的返回值并结束函数运行
return a + b;
}
var sum = add(10, 20);
console.log(sum); // 输出:30
在JavaScript中,我们可以在函数内部中声明函数。
如:
function add() {
var a = 10;
var b = 20;
function add(a, b) {
return a + b;
}
return add(a, b);
}
var sum = add(10, 20);
console.log(sum); // 输出:30
函数表达式
2.2 函数表达式
使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式。
var fun = function(a, b) {
console.log(a + b);
};
fun("asd",10)//输出“asd10”
函数作用域
函数作用域也叫局部作用域 再函数中用var let const 关键字声明名的变量叫做局部变量只能再该函数中访问。
例如:
function add() {
var a = 10;
var b = 20;
//在函数中输出 a和b
console.log(a);
console.log(b);
return a + b;
}
add(10);
//在全局中输出 a和b
console.log(a);
console.log(b);
通过上图 可以看到 函数中的输出a和b 打印出来了,但是再全局中输出a和b 却提示 没有定义该变量。
那么问题来了 全局和函数中都用相同的变量那么再调用的时候使用的时全局的还是函数自己的呢??
第一种函数和全局中都有
var a = 30;
var b = 100;
function add() {
var a = 10;
var b = 20;
//在函数中输出 a和b
console.log(a);
console.log(b);
return a + b;
}
add();
第二种函数中们没有全局中有
var a = 30;
var b = 100;
function add() {
//在函数中输出 a和b
console.log(a);
console.log(b);
return a + b;
}
add();
再两者都有的情况下使用的函数自身,但是再函数自身没有的时候使用的全局的
总结可得:先由局部开始搜索变量,当局部找到该变量的时候,就不会再继续往外层作用域中找变量了。
函数变量的生存期
JavaScript 变量的生命期从它们被声明的时间开始,在函数运行完毕后被销毁。
函数内用 var 关键字声明的局部变量来说,当退出函数时,这些局部变量即失去了它们的价值,它们都会随着函数的调用的结束而销毁。
注意:只要函数运行完毕,局部变量就会被销毁回收。 虽然调用函数结束,局部变量确实会销毁。但并不是完全销毁,而是一直函数的内部环境中存活着,当函数再度被调用时,变量就“复活”了,所以局部变量还是非常方便的,不会影响二次使用。