js的Function类型

本文详细解析了JavaScript函数的声明与表达式的区别,介绍了函数内部属性arguments、this和caller的使用,以及如何利用arguments.callee解决函数引用问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请记住!每个函数都是Function类型的实例,因此函数名实际上也是一个指向函数对象的指针。

  • 函数的形式

  1. 函数声明
alert(sum(10,10))
function sum(sum1,sum2){
	return sum1+sum2;
}

由于解析器会率先读取函数声明,并在全体代码执行前执行了它,所以不会报错。

  1. 函数表达式
alert(sum(10,10))
var sum = function(sum1,sum2){
	return sum1+sum2;
}

该代码会报错,因为系统找不到sum。

函数声明和函数表达式除了以上区别外,没什么不同了。

  • 函数内部属性

在函数内部有两个特殊的对象:arguments 和 this
还有个callee属性
arguments
arguments有一个名叫callee的属性,该属性是一个指针指向拥有这个argument对象的函数。举个阶乘的例子

function factorial(num){
	if(num<=1){
		return 1;
	}
	else{
		return num*factorial(num-1)
	}
}

var f= factorial
factorial = null
alert(f(10));  //报错,factorial is not a function

但这个函数只能针对factorial()这个函数,如上,当把函数变量赋值给了另外一个变量,且原函数设置为null时,就会出现bug了,为了解决这个问题,我们便可以采用arguments的callee属性,来指向自身这个函数

function factorial(num){
	if(num<=1){
		return 1;
	}
	else{
		return num*arguments.callee(num-1)
	}
}

var f= factorial
factorial = null
alert(f(10));  //3628800

this
this指的是当前的对象

window.color = "red";
var o = {
	color:"blue";
}
function sayColor(){
	return this.color;
}
sayColor();     //red
o.sayColor = sayColor;
o.sayColor();		//blue

caller
这个属性中保存着调用当前函数的函数的引用

function outer(){
	inner();
}
function inner(){
	alert(inner.caller);
}
outer();

以上会输出outer()的原函数,为了降低耦合性,也可以这样写

function outer(){
	inner();
}
function inner(){
	alert(arguments.callee.caller);
}
outer();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值