函数— 函数也是一个对象,普通的对象可以装数据,函数可以封装功能,需要的时候可以执行这些功能(代码)
// 创建一个函数对象
var fun = new Function();
//可以将要封装的代码以字符串的形式传给构造函数
var fun = new Function("console.log("这是我的第一个函数");");
//封装到函数的代码不会立即执行,调用的时候才会执行
//调用函数 语法: 函数对象()
fun(); //调用函数时,函数中封装的代码会按照顺序执行
实际开发中不推荐使用上述函数
//使用函数声明创建一个函数
//语法:
function 函数名(形参1,形参2,...){
语句...}
function fun2(){
document.write("hello");
console.log("world");
}
//使用函数表达式来创建一个函数
var fun3 = function(){
语句...}
函数的参数
//定义一个求和的函数
//可以在函数的括号中可以定义形式参数,多个形参使用逗号隔开
//写上去就相当于声明了变量,但是没有赋值
function sum (a, b){
console.log(a+b);
}
//调用的时候才写实参,实参和形参是一一对应的关系
sum(1,3);
//调用函数的时候,函数解析器不会检查实参的类型,所以要对参数进行类型的检查
sum(123,"hello");
//返回123hello
sum(false, true);
//返回1
//函数解析器也不会检查参数的个数
sum(123,456,987);
//返回579,自动忽略其他的参数,其他的实参不会被赋值,检查其他参数的类型是undefined
返回值
//如果不想要结果直接弹出,需要声明一个变量来接收计算结果
function sum (a, b, c){
var d = a + b+ c;
return d; //return 后的值作为一个函数的运算结果返回,且之后的语句不会执行
}
var result = sum (4,5,6); //定义变量接收结果
练习
//定义一个函数,偶数返回true,奇数返回false
function even (a){
if(a%2==0){
return true;
}else{return false;
}
}
//更简单一点
function even (num){
/* if(a%2==0){ a%2的返回值本身就是布尔值,不需要再写一个返回了
console.log(true);
}else{console.log(false);
}*/
return num%2==0;
}
var result = even(30);
console.log("result ="+ result);//返回true
//定义一个函数,根据半径计算圆的面积
function circle (r){
return Math.PI *r*r;
}
var result = circle(10);
console.log("result ="+ result);
//形参可以是任意数据类型,对象也可以
//参数过多的时候可以考虑封装到一个对象中去
function person (o){
console.log("I am"+o.name+"."+"I am"+o.age+"years old"+".And I live in"+o.address);
}
var obj = {name:"Lucy",
age:28,
address:"dorm"
};
person(obj); //调用函数,讲obj这个对象作为参数传入person函数
//实参也可以是一个函数
function fun (a){
a(obj); //2. 这里就变成了person(obj);所以实际返回的值和person函数是一模一样的
}//这个函数的功能就是调用函数person
function(person); //1. 这里调用了person函数作为fun函数的参数
fun(function(){alert("hello");}); //fun的参数a现在就是后面的匿名函数
fun(circle);//调用函数对象,相当于把一整个冰激凌机器作为参数
fun(circle());//调用函数,将circle函数的返回值作为fun函数的参数,相当于给对方一个冰激凌
返回值(return)的类型
function fun2(){
for(var i = 0; i<5; i++){
if(i==2){
/* break; 跳出当前循环,返回值是0,1
continue; 跳过这个条件,继续剩下的循环,返回值是0,1,3,4,5 */
return; //直接退出当前函数,剩下的不再执行
console.log(i);
console.log("函数执行完成");
}
}
//返回值可以是任意数据类型,可以是对象,也可以是一个函数
function fun3(){
return {name= "Le"};
} //返回一个对象
function fun3(){
//函数内部可以继续声明函数
function fun4 (){
alert("这是函数4");}
return fun4; //将函数4作为返回值返回
return fun4();// 将函数运算后的返回值返回,如果没有参数的话这个值是undefined
}
a = fun3(); //或者直接写fun3()(); fun3()= fun4; a()=fun4()=fun3()();
console.log(a);//返回函数4
立即执行函数
//函数调用的语法 函数对象();
(function (){
alert("这是一个匿名函数");
})(); //函数定义完,立即被调用,一般只能执行一次
//也可以一样传参数
(function (a, b){
document.writ("a="+a);
document.writ("b="+b);
})(123,678); //输出a=123,b=678