函数
解释:把一坨重复的代码封装,在需要的时候直接调用即可
作用: 代码的重用
1.语法
function 函数名字(){
函数体---一坨重复的代码
}
2.函数的调用
函数名();
注意:函数需要先定义才能使用
函数里面可以调用其他函数
eg:求一个数组的和
function arraySum(){
var sum=0;
var arr=[10,20,40,50,30];
for(var i=0;i<arr.length;i++){
sum+=arr[i];
}
console.log(sum);
}
arraySum();
3.函数的参数
在函数定义的时候,函数名字后面的小括号里的变量就是参数。
形参:函数在定义的时候小括号里的变量叫形参,不需要写var
实参:函数在调用的时候小括号里传入的值叫实参,实参可以是变量也可以是值
4.函数的返回值
如果一个函数有return,那么这个函数就有返回值
如果函数中有return,但是后面什么内容都没有,这个函数没有明确返回值.
如果一个函数中没有明确的返回值,在调用的时候接收了,结果就是undefined
如果直接输出函数的名字,那么是这个函数的代码
eg1:求三个数的最大值
function getThreeMax(x,y,z){
return x>y?(x>z?x:z):(y>z?y:z);
}
console.log(getThreeMax(80,20,100));
eg2:判断一个数是否是素数(只能被1和自身整除的)
解题思路:用这个数字和前面所有的数字整除一次(没有1的,没有自身的)
function isPrimeNumber(num){
for(var i=2;i<num;i++){
if(num%i==0){
return false;
}
return true;
}
}
console.log(isPrimeNumber(18)?"是质数":"不是质数");
eg3:通过函数实现冒泡排序
function sortArray(arr){
for(var i=0;i<arr.length-1;i++){
for(var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
arr[j]=arr[j]^arr[j+1];
arr[j+1]=arr[j]^arr[j+1];
arr[j]=arr[j]^arr[j+1];
}
}
}
return arr;
}
console.log(sortArray([50,10,30,80,24,57]));
5.arguments对象
arguments是一个对象,是一个伪数组,使用arguments对象可以获取传入的每个参数的值
arguments.length-->实参的个数
arguments[索引]--->实参的值
eg.计算n个数字的和
function f1(){
var sum =0;
for(var i=0;i<arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
console.log(f1(10,20,30,40));
console.log(f1(10,20,30,40,50,60));
6.函数的其他定义方式
命名函数:函数如果有名字,就是命名函数
匿名函数:函数如果没有名字,就是匿名函数
函数的另一种定义方式
函数表达式:把一个函数给一个变量,此时形成函数表达式
var 变量=匿名函数;
var f1 = function(){};
调用: f1();
函数是有数据类型的 function 类型的
函数可以作为参数使用,如果一个函数作为参数,称这个函数为回调函数
函数也可以作为返回值使用
7.作用域:使用范围
全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用
除了函数以外,其他的任何位置定义的变量都是全局变量
局部变量:在函数内部定义的变量,是局部变量,外面不能使用
隐式全局变量:声明的变量没有var(可以被删除)
8.预解析:提前解析代码
预解析把变量的声明提前了--提前到当前所在作用域的最上面
预解析把函数的声明提前了--提前到该函数的作用域的最上面(里面)
eg:var a = 25;
function abc (){
alert(a);//undefined
var a = 10;
}
abc();
eg2:
-------------
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
-------------
解答:
function f1(){
var a;//局部变量
a=9;
b=9;//隐式全局变量
c=9;//隐式全局变量
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
f1();
console.log(c);//9
console.log(b);//9
console.log(a);//报错,因为a是局部变量,只能在函数内部访问