函数
1.函数的定义
函数就是具有一定功能的可以重复执行的代码块
定义函数的方法有三种:
- 自定义函数:使用函数声明语法定义
function 函数名称() {
//代码;
}
- 匿名函数:使用函数表达式定义
var 函数名称 = function () {
//代码;
}
- 构造函数:使用函数构造方法
var 函数名称 = new Function("//代码");
函数不调用不执行
2.调用函数
function getSum(){
var sum=0;
for(var i =0; i<=100;i++){
sum+=i;
}
console.log(sum);
}
getSum();//调用函数
-
作为一个函数调用
通过函数名称+()进行调用,如果有参数传递相应的参数即可。 -
作为全局对象调用
当函数没有被自身调用时,this的值被成为全局对象,在web浏览器中全局对象是浏览器窗口window对象,函数作为一个全局对象调用,会使this的值成为全局对象,使用window对象作为一个变量容易造成程序崩溃。 -
函数作为方法调用
可以将函数定义为对象的方法进行调用 -
使用构造函数调用函数
如果在函数调用前使用了new关键字,则调用了构造函数 -
作为回调函数调用函数
3.参数
- 如果定义了参数,在调用的时候没有传值,默认设置为undefined
- 在调用的时候如果传递参数超过了定义时参数,js会忽略多余的参数
- js中不能直接写默认值,可以通过arguments对象来实现默认值效果
- 可以通过arguments对象实现可变参数的函数
- 通过值传递参数在函数体内对变量做修改不会影响变量本身
- 通过变量传递参数在函数体内对变量做出更改会影响变量本身
<script>
function fn(a,b) {
console.log(a+b);
}
fn(1,2);
fn(3,4);
fn(5,6);
</script>
4.函数重载
JavaScript中没有方法的重载:如果函数名重复,后面的函数会覆盖前面的函数
<script>
function fn(a,b) {
return a+b;
}
function fn(a,b,c) {
return a+b+c;
}
var result = fn(5,6);//NaN
</script>
5.变量的作用域
- 局部变量:在函数体内声明的的变量,仅在函数体内可以使用
- 全局变量:函数体外声明,在变量声明开始到脚本结束都可以使用
尽量控制全局变量,容易引发bug,最好总是使用var声明变量
<script>
//局部变量:只有局部能够访问的变量
//函数内部用var定义的变量
//全局变量:在哪里都能访问到的变量(又称成员变量)
//函数外部或者进入javascript之后立即定义的变量和函数内部不带有var的变量
var num3 = 333;//全局变量
//函数加载的时候只加载函数名不加载函数体
function fn() {
var num1 = 111;//局部变量
num2 = 222; //全局变量
console.log(num3);
}
fn();
//console.log(num1);//会报错!
console.log(num2);
console.log(num3);
</script>
- 隐式全局变量:
<script>
function fn1() {
//b和c都是隐式全局变量
var a = b = c = 1;
//e和f是隐式全局变量(分号隔开)
var d = 1;e = 2;f = 3;
//g h i都不是隐式全局变量(逗号隔开)
var g = 1,h = 2,i = 3;
}
fn1();
//console.log(a);
console.log(b);
console.log(c);
//console.log(d);
console.log(e);
console.log(f);
//console.log(g);
//console.log(h);
//console.log(i);
</script>
6.回调函数
回调函数一般是用于定义一个规则来使用的
规则的传递只能通过函数实现,通过变量无法达成
<script>
console.log(fn(10,5,test1));
console.log(fn(10,5,test2));
console.log(fn(10,5,test3));
console.log(fn(10,5,test4));
function fn(num1,num2,demo) {
return demo(num1,num2);
}
//定义四个规则:加减乘除
function test1(a,b) {
return a+b;
}
function test2(a,b) {
return a-b;
}
function test3(a,b) {
return a*b;
}
function test4(a,b) {
return a/b;
}
</script>
7.函数返回值
返回值:执行完毕函数以后,我们能给其他变量赋值
<script>
//对数组排序,从小到大
var arr = [1,3,2,6,4,5];
function bubble(array) {
//外循环控制轮数
for(var i=0;i<array.length-1;i++){
//内循环控制次数
for(var j=0;j<array.length-1;j++){
if(array[j]>array[j+1]){
var temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
//有了return执行完毕方法后,就可以用变量接收数据
return array;
}
console.log(bubble(arr));
</script>