javascript中的函数(Function)

函数本质

javascript中的函数本质都是Function引用类型的实例,即函数就是一个Function类型的对象

函数定义

1.声明方式:
如:
function func(num){
	return num+1;
}

2.函数表达式方式
var func=function(){
         return 'hello';
}

3.new方式
var func=new Function("num1","num2","return num1+num2") //最后一个参数就是函数体,前面都是函数参数

函数没有重载

js中函数没有重载,因为函数名就是一个保存函数对象引用的变量
如:
function addSomeNumber(num){
      return num + 100;
}
function addSomeNumber(num) {
      return num + 200;
}
实质:
var addSomeNumber = function (num){
      return num + 100;
};
addSomeNumber = function (num) {
      return num + 200;
};

函数对象的属性

1.this
指向函数执行时的外部作用域对象
2.arguments
指向保存参数的一个类数组对象,arguments对象有一个属性callee,这个属性执行函数对象,有趣的是构成了一个循环,函数对象的arguments指向参数对象,参数对象的callee属性执行函数对象。
举例:
function factorial(num){ 
	if (num <=1) {
		return 1;
	} else {
		return num * factorial(num-1); //这个求阶乘的函数和函数名严重耦合,如果将函数引用赋值给其他变量将来使用此函数将报错
	}
}


var trueFactorial = factorial;
factorial = function(){
	return 0;
};
alert(trueFactorial(5)); //递归结果不对,factorial执行的函数变成了一个返回0的函数
alert(factorial(5)); //结果0
function factorial(num){
	if (num <=1) {
		return 1;
	} else {
		return num * arguments.callee(num-1); //这样是松耦合的,和函数名就没有关系
	}
}

3.caller

执行函数执行时的外部函数作用域对象,这个属性强调的是函数外部执行环境必须是一个函数,如果不是那么这个属性值为null
如:

function outer(){
	inner();
}
function inner(){
	alert(arguments.callee.caller); //弹窗显示的是outer函数,即caller属性指向outer函数对象
}
outer();

4.length

length属性表示函数形参个数

5.prototype

prototype属性执行函数对象的原型,任何引用类型都有原型,都是通过构造函数中的prototype属性引用的

函数对象中的方法

apply和call方法
这两个方法效果一样,只是传递参数的方式不一样,第一个参数函数执行的外部作用域对象,后面参数就是函数参数
如:

function sum(num1, num2){
	return num1 + num2;
}
function callSum1(num1, num2){
	return sum.apply(this, arguments); // 传入 arguments 对象
}
function callSum2(num1, num2){
	return sum.apply(this, [num1, num2]); // 传入数组
}
alert(callSum1(10,10)); //20
alert(callSum2(10,10)); //20
//call方法
function sum(num1, num2){
	return num1 + num2;
}
function callSum(num1, num2){
	return sum.call(this, num1, num2);
}
alert(callSum(10,10)); //20
//作用域的不同执行效果不一样
window.color = "red";
var o = { color: "blue" };
function sayColor(){
	alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值