JavaScript中的Function类型
1、Function
Function是一个用来构建函数的类(构造函数)。
(1)、构建方法:
<script>
//创建函数
//1、普通方式
function fn1(n){
console.log(n);
}
fn1(10);
//2、使用变量初始化函数
var fn2=function (n){
console.log(n);
}
fn2(100);
//3、new创建
var fn3=new Function();//构建了一个函数对象犯fn3
fn3=function (n1,n2){
console.log(n1+n2);
}
fn3(10,20);
(2)函数传参
//传参可以是变量n、对象obj、数组arr、表达式、函数等
function person(obj){ /*传入的参数是对象*/
return obj.name+","+obj.sex;
}
console.log(person({name:"张三",sex:"男",age:18}));
function person(obj,info="是一位好学生!"){//这里设置了info参数的默认值
return obj.name+","+obj.sex+","+info;
}
console.log(person({name:"张三",sex:"男",age:18}));
console.log(person({name:"张三",sex:"男",age:18},"学习不错!"));//这里输入了新的参数值“学习不错!,将代替默认值。
//形参为函数
function box(sumFunction,num){
return sumFunction(num);
}
function sumFunction(num){
return num+10;
}
var result=box(sumFunction,10);//传递函数到另外一个函数中
console.log(result);
2、函数内部属性argument
在函数内部,有两个特殊的对象:argument和this。
argument是一个类数组对象,包含着传入函数中的所有参数,主要用途的保存函数参数。这个对象有一个callee属性,是一个指针,指向拥有这个argument对象的函数。即通过argument.callee调用函数自身,一般用于函数的递归调用。
<script>
//需求:求3!
function fact(n){
if (n==1){
return 1;
}
else {
return n*fact(n-1);
}
}
console.log(fact(3));
//使用argument.callee
function fact(n){
if (n==1){
return 1;
}
else {
return n*arguments.callee(n-1);
}
}
console.log(fact(3));
</script>
当实际开发代码规模较大时,使用argument.Callee可以有减少函数名的书写,最重要的是方法名修改比较方便,只需修改定义时的名称就行,有利于维护。
3、this指针对象。
在全局中this指向的是window(在JS中没有global这个全局对象,而JS的全局对象是window);
在函数中this指向的这个函数执行所操作的当前对象。
<script>
var x=100;
y="abc";//等价于window.y="abc";
console.log(x,y);
console.log(this.y);//这里的this代表的是window
//函数中this指向的这个函数执行所操作的当前对象
var name="李四";//window.name="李四“
var obj={
name:"张三",
age:16,
fn:function (){
console.log(this.name+this.age);//this指向当前执行这个函数的对象。
}
}
console.log(this.name);//这个this没有在obj中,指向window的“李四”。
obj.fn();
</script>