1.函数的简介
函数也是一个对象
函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码)
使用typeof检查一个函数对象时,会返回function
var fun = new Function();
- 调用函数语法
函数对象()
fun();
当调用函数时,函数中封装的代码会按照顺序执行
很少使用构造函数的方式来创建一个对象
使用函数声明来创建一个函数
语法:
function 函数名([形参1,形参2。。。形参N]){
语句...
}
function fun2(){ //匿名函数
}
在函数内部还可以声明函数
function fun3(){
function fun4(){
alert("我是fun4");
}
return fun4();
}
使用函数表达式来创建一个函数
var 函数名 = function([形参1,形参2,...形参N]){
语句。。。
};
var fun3 = function(){
console.log(“****”);
};
fun3() 调用函数
fun3 函数对象
2.函数的参数
可以在函数的()中来指定一个或多个形参
函数的实参可以是任意数据类型
实参可以是对象,也可以是一个函数
function sum(a,b){
console.log(a+b);
}
调用函数时解析器不会检查实参的类型
所以要注意是否有可能会接受到非法的参数,如果有可能则需要对参数进行类型检查
调用函数时,解析器也不会检查实参的数量,多余的实参不会被赋值
如果实参的数量少于形参的数量,这没有对应实参的形参将是undefined
3.函数的返回值
使用return来设置函数的返回值
语法: return 值
return 后的值将会作为函数的执行结果返回
返回值的类型
返回值可以是任意的数据类型,也可以是一个对象,函数
将fun4函数对象作为返回值返回
function fun3(){
function fun4(){
alert("我是fun4");
}
return fun4();
}
4.立即执行函数
函数定义完后立即执行,并只被调用一次
(function(){
alert("我是一个服务函数");
})();
(function(a,b){
console.log("a = "+a);
console.log("b = "+b);
})(123,456);
5.方法
var obj = new Object();
obj.name = "孙悟空";
obj.name = 18;
obj.sayName = function(){
console.log(obj.name);
};
obj.sayName();
对象的属性也可以是函数
如果一个函数作为一个对象的属性保存
那么我们称这个函数是这个对象的方法
调用函数就说调用这个对象的方法
方法和函数只是名称上的区别没有其他的区别
调方法
obj.sayName();
调函数
fun();
6.枚举对象中的属性
for ... in 语句 ==类似于java的for each==
for(var 变量 in 对象){
}
for(var n in obj){
console.log("属性名:"+n);
console.log(“属性值:”+obj[n]);
}
关于取值的地方和java还是不一样的
7.函数中的方法 (P79)
call()和apply()
都是函数对象的方法,需要通过函数对象来调用
当对函数调用call()和apply()都会调用函数执行
fun.apply();
fun.call();
fun();
这三个效果其实是一样的
-
在调用call和apply()可以将一个对象指定为第一个参数,这个对象将会成为函数执行时的this
fun()的this是window
call()和apply()指定是哪个对象就是哪个对象为this
fun.call(obj); -
call()方法可以将实参在对象之后依次传递
fun.call(obj,2,3); -
apply()方法需要将实参封装到一个数组中统一传递
fun.apply(obj,[2,3]);
this的情况
1.以函数形式调用时,this永远都是window
2.以方法的形式调用时,this是调用用方法的对象
3.以构造函数的形式调用时,this是新创建的那个对象
4.使用call和apply调用时,this是指定的那个对象
8、arguments(P80)
在调用函数时,浏览器每次都会传递进两个隐含的参数
1.函数的上下文对象this
2.封装实参的对象arguments
- arguments是一个类数组对象,它可以通过索引来操作数据,也可以获取长度
- 在调用函数是,我们所传递的实参都会在arguments中保存
function fun(){
console.log(arguments.length);
}
arguments.length就是实参的个数
arguments[0];可以将参数取出
arguments的属性callee
这个属性对应的函数对象,就是当前正在指向的函数对象
function fun(){
console.log(arguments.callee == fun);//true
}