函数(Function)
- 函数也是一个对象,也具有普通对象的功能
- 函数中可以封装一些(功能)代码,在需要的时候可以去调用函数来执行这些代码
- 使用typeof检查一个函数时会返回function
1.创建一个函数
a. 可以将要封装的代码以字符串的形式传递给构造函数
-
实际开发中很少使用构造函数来创建一个函数对象
var fun = new Function("console.log('Hello 这是我的第一个函数');"); console.log(fun);//console.log('Hello 这是我的第一个函数');
封装到函数中的代码不会立即执行
函数中的代码会在函数调用的时候执行
调用函数 语法,函数对象()
-
当调用函数时,函数中封装的代码会按照顺序执行
fun();//Hello 这是我的第一个函数 fun.hello ="你好"; console.log(fun.hello);//你好
b.函数声明创建一个函数
function 函数名([形参1,形参2...形参N]){
语句...
}
function fun2(){
console.log('Hello 这是我的第二个函数');
}
-
调用fun2
fun2();//Hello 这是我的第二个函数
c.函数表达式创建一个函数
var 函数名 = function([形参1,形参2...形参N]){
语句...
};
var fun3 =function(){
console.log('我是匿名函数中封装的代码');
}
-
调用fun3
fun3();//我是匿名函数中封装的代码
2.函数的参数
形参和实参
- 形参:形式参数
- 定义函数时,可以在()中定义一个或多个形参,形参之间使用,隔开定义形参就相当于在函数内声明了对应的变量但是并不赋值,形参会在调用时才赋值。-
实参:实际参数
- 调用函数时,可以在()传递实参,传递的实参会赋值给对应的形参,
调用函数时JS解析器不会检查实参的类型和个数,可以传递任意数据类型的值。注意是否可能接收到非法参数,如果有可能则需要对参数进行类型检查。
如果实参的数量大于形参,多余实参将不会赋值,
如果实参的数量小于形参,则没有对应实参的形参将会赋值undefinedfunction sum(a,b){ console.log(a+b); } sum(1,2);//3 sum(123,"hello");//123hello sum(true,false);//1 sum(1,2,"hello");//3 sum(123);//NaN
实参可以是任意的数据类型,也可以是一个对象
当我们的参数过多时,可以将参数封装到一个对象中,然后通过对象传递function mianji(r){ return 3.14*r*r; } result = mianji(5); console.log("result = "+result); /* * 创建一个函数,可以在控制台中输出一个人的信息 * 可以输出人的 name age gender address * * 实参可以是任意的数据类型,也可以是一个对象 * 当我们的参数过多时,可以将参数封装到一个对象中,然后通过对象传递 */ function sayHello(o){ //console.log("o = "+o); console.log("我是"+o.name+",今年我"+o.age+"岁了,"+"我是一个"+o.gender+"人"+",我住在"+o.address); } //sayHello("猪八戒",28,"高老庄","男"); //创建一个对象 var obj = { name:"孙悟空", age:18, address:"花果山", gender:"男" }; sayHello(obj);
实参可以是一个对象,也可以是一个函数
function fun(a){
console.log("a = "+a);
//a(obj);
}
//fun(sayHello);
//fun(function(){alert("hello")});
fun(mianji(10));
/*
* mianji()
* - 调用函数
* - 相当于使用的函数的返回值
*
* mianji
* - 函数对象
* - 相当于直接使用函数对象
*/
3.返回值
可以使用 return 来设置函数的返回值
语法:return 值
return后的值将会会作为函数的执行结果返回,
可以定义一个变量,来接收该结果
在函数中return后的语句都不会执行
如果return语句后不跟任何值就相当于返回一个undefined,
如果函数中不写return,则也会返回undefined
return后可以跟任意类型的值
/* 创建一个函数,用来计算三个数的和*/
function sum(a , b , c){
//alert(a + b +c);
var d = a + b + c;
return d;
//return undefined;
}
//调用函数
//变量result的值就是函数的执行结果
//函数返回什么result的值就是什么
var result = sum(4,7,8);
//var result = alert("hello");
console.log("result = "+result);
function fun(){
alert("函数要执行了~~~~");
for(var i=0 ; i<5 ; i++){
if(i == 2){
使用break可以退出当前的循环
//break;
continue用于跳过当次循环
//continue;
使用return可以结束整个函数
//return;
}
console.log(i);
}
alert("函数执行完了~~~~");
}
4.立即执行函数
函数定义完,立即被调用,这种函数叫做立即执行函数
立即执行函数往往只会执行一次
(function(){
alert("我是一个匿名函数~~~");
})();
(function(a,b){
console.log("a = "+a);
console.log("b = "+b);
})(123,456);