1、函数
<script type="text/javascript">
//函数对象
(function(){
alert("我是匿名函数");
})();
//赋值
(function(aa,ba){
alert(aa);
alert(ba);
})(1,2);
</script>
2、函数的返回值
- 在调用函数时,希望它可以存储下来而不是立即调用
- 可以使用return来设置函数的返回值
- 语法:return 值;
- return后的值将会作为函数的执行结果返回。
- 在return后面的值都不会执行
- return后面不跟任何值,就会直接返回undefined
- 如果函数中不写return,则也会返回undefined
- return后面可以跟任意类型的值
-
function sum(a,b,c,d){
var bbb = a+b+c+d;
return bbb;
}
//定义的result的值就是函数的执行结果
//函数返回什么,result就是什么
//这里就相当于将结果保存在定义的result中,当想要用的时候在拿出来
var result=sum(1,2,3,4);
console.log("result=" + result);//拿出来用了
- 实参可以是任意的数据类型,也可以是一个对象
- 当我们的参数过多时,我们可以将参数封装到一个对象中,然后通过对象传递
- 实参也可以是函数
-
//实参是对象
function wo(o){
console.log("我是"+o.name+",我今年"+o.age+",我性别"+o.gender+",我家"+o.address);
}
//wo("ll",12,"fsadf","fsdaf");//注意顺序
//创建一个对象
var obj={
name:"于炀",
age:19,
gender:"男",
address:"HOG总部"
}; //注意这里是声明,要加;号
//wo(obj);
//函数里面的o作为被封装的对象,代表的是定义的obj对象,所以在调用时,使用obj
//思考:那么可不可以定义更多的对象,然后利用一个函数去引用他们
//实参是函数
function ni(a){
//console.log(a);
}
ni(wo(obj));
//ni(function(){alert("你好");})
- 返回值的类型:
- 返回值可以是任意的数据类型
function m(){
//var obj={name:"sdfsadf"};
// return obj;
return {name:"sdfsadf"};
}
var a=m();
console.log(a);
//返回值为函数
function n(){
//在函数内部再声明一个函数
function l(){
alert("我是l");
}
//将l函数对象作为返回值返回,所以这个return是在函数n里面的
//此时n函数的返回值为l函数
return l;
}
var k= n(); //声明一个变量k,用来调用函数n
console.log(k); //输出k后得到的就是函数n,调用的是n函数里面的东西
k(); //直接调用l函数
n()(); //直接调用l函数
- 练习1:
- 定义一个函数,判断一个数字是否是偶数,是为true,否为false
function isOu(num){
return num%2==0;
/* if (num%2==0){
return true;
} else{
return false;
}*/
}
var result=isOu(2);
console.log(result);
- 练习2:
- 定义一个函数,可以根据半径计算一个圆的面积,并返回计算结果
function mianji(r){
return 3.14*r*r;
}
var a=mianji(10);
console.log(a);
3、函数对象的方法
- call()和apply()
- 这两个方法都是函数对象的方法,需要通过函数对象来调用
- 当对函数调用call()和apply()都会调用函数执行
- 在调用call和apply()可以将一个对象指定第一个参数
- call() :可以将实参在对象中依次传递
- apply() :需要将实参封装到一个数组里,统一传递
-
function fun(){
alert(this.name);
}
//fun.call();
//fun.apply();
//fun();
var obj={
name:"obj",
hello:function(){
alert(this.name);
}
};
var obj2={name:"obj2"};
//fun.call(obj); //指定谁this就是谁,这里指定的是obj,所以this是obj
//fun(); //this是window
obj.hello.apply(obj2);
function fun(a,b){
console.log("a="+a);
console.log("b="+b);
//alert(this);
}
var obj={
name:"obj",
hello:function(){
alert(this.name);
}
};
fun.call(obj,2,3);
fun.apply(obj,[2,3]);
var obj2={name:"obj2"};
- arguments :
- 在调用函数时,浏览器每次都会传递两个隐含的参数
- 1、函数的上下文对象:this
- 2、封装实参的对象:arguments
- arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
- 在调用函数时,我们传递的实参都会在arguments中保存
- arguments.length可以获取实参的长度
- 即使不定义形参,也可以通过arguments来使用实参
- arguments[0] 表示第一个实参
- arguments[1] 表示第二个实参
- 它里面有一个属性叫做callee
- 这个属性对应一个函数对象,就是当前正在执行的函数对象
function fun(){
//检查arguments是不是数组
console.log(arguments instanceof Array); //false
console.log(Array.isArray(arguments)); //false
console.log(arguments.length);
console.log(arguments[1]);
console.log(arguments.callee == fun); //true
}
fun("heeee" , true);