1.函数
- 也是一个对象
- 函数中可以封装一些功能(代码),在需要时可以执行
- 使用typeof检查会返回function
1.1创建函数的几种方法:
1.1.1 创建一个函数对象(实际不会这样创建函数)
可以将要封装的代码以字符串的形式传递给构造函数
var fun = new Function("console.log('hello')");
封装到函数中的代码不会立即执行
函数中的代码会在函数调用时执行
调用函数 语法: 函数对象()
调用函数时,函数中封装的代码会按照顺序执行
fun();
1.1.2函数声明
语法:
function 函数名([形参1,形参2,...形参n]){
语句...
}
function fun2(){
console.log("nice to meet u!")
}
fun2();
1.1.3函数表达式
语法:
var fun3=function(){
};
1.2立即执行函数
函数定义完,立即被调用
往往只会执行一次
将匿名函数用小括号包起来(不包会报错),再在后面加上()即可
()内可传实参
(function(){
alert("我是一个匿名函数");
})();
2.函数的参数
定义一个用来求两数和的函数
可以在函数的()钟指定一个或多个形参,逗号隔开
声明形参就相当于在函数内部声明了变量
在调用函数时,可以在()内指定实参
function sum(a,b){
console.log(a+b);
}
sum(2,2);//4
调用函数时解析器不会检查实参类型。
注意是否有可能接收到非法参数,有可能,则需要对参数进行类型检查
调用函数时解析器不会检查实参数量
多余的实参不会被赋值
实参数量小于形参,则没有实参的形参将是undefined
3.函数的返回值
可以使用return来设置函数的返回值
语法:
return 值
return后的值将会作为函数的执行结果返回,
可以定义一个变量来接收该结果
return后的语句都不执行(结束整个函数)
如果return语句后不跟值或不写return,相当于返回undefined
返回值可以是任意的数据类型,也可以是一个对象或函数
function sum(a,b,c){
var d = a+b+c;
return d;
alert(d);无效代码
}
var result=sum(1,2,3);
console.log(result);6
实参可以是任意的数据类型,当然也可以是一个对象
当我们的参数过多时,可以将参数封装到一个对象中,通过对象传递
练习
创建函数,在控制台输出一个人的信息
function sayHello (o){
console.log("我是"+o.name+",今年我"+o.age+"岁了。");
}
var obj={
name:"蜘蛛侠",
age:18
}
sayHello(obj);
实参也可以是一个函数
使用函数名+()的形式是调用函数,相当于使用函数的返回值
使用函数名的试行相当于直接使用函数对象
比喻:不加括号相当于使用冰淇淋机,加括号相当于使用冰淇淋
4.函数的方法
call()
apply()
- 需要通过函数对象来调用
- 当对函数调用call()和apply()都会调用函数执行
- 在调用call() apply()时,会将一个对象指定为第一个参数
这个对象会成为函数执行时的this - call()方法不需要将实参封装到一个数组中统一传递
- apply()方法需要将实参封装到一个数组中统一传递
function fun (a,b){
...
}
fun.call(obj,2,3);
fun.apply(obj,[2,3]);
this的情况:
1.以函数型式调用时,this是window
2.以方法的形式调用时,this是调用方法的对象
3.以构造函数的形式调用时,this是新创建的那个对象
4.使用call() apply()调用时,this是第一个参数指定的那个对象