JavaScript函数内部属性和函数⽅法实例详解
函数是由事件驱动的或者当它被调⽤时执⾏的可重复使⽤的代码块。
函数是对象,有⾃⼰的属性和⽅法。⾸先通过console下输出的函数属性⽅法来直观的看⼀下:
javascript 函数函数内部属性只要包括两个特殊的对象:arguments和this。
函数属性包括:length和prototype
函数⽅法(⾮继承)包括:apply()和call()
继承⽽来的函数⽅法:bind()、toString()、toLocaleString()、valueOf()
其他的⽬前不熟,后⾯再补充
1. 函数内部属性
在函数内部,有两个特殊的对象,arguments和this。
arguments属性
arguments是⼀个类数组对象,包含传⼊函数的所有参数,arguments的主要⽤途是保存函数参数,但这个对象有⼀个callee 属性,该属性是⼀个指针,指向拥有这个arguments对象的函数,下⾯是⾮常经典的阶乘函数。
function factorial (num){
if(num <= 1){
return 1;
} else{
return num * factorial(num-1);
}
}
定义阶乘函数⼀般都会⽤到递归算法,如上⾯代码所⽰,在有函数名字,并且函数名字以后也不会改变的情况下,这种定义没问题。但是这个函数的执⾏与函数名factorial紧紧耦合在了⼀起,为了消除这种紧密耦合现象(函数名字改变等情况),可以使⽤arguments.callee。
function factorial(num){
if(num<=1){
return 1;
} else{
return num * arguments.callee(num-1);
}
}
重写后的factorial()函数的函数体内,没有再引⽤函数名factorial。这样即使改变函数名字,都可以保证正常完成递归调⽤。例如:
var trueFactorial = factorial; //改变原函数体的指针(保存位置)
factorial = function (){ //factorial 指向返回0的新函数
return 0;
}
alert(trueFactorial(5)); //120
alert(factorial(5)); //0
如果,不使⽤arguments.callee,那么trueFactorial(5)同样返回0;
this属性
2. 函数的⽅法
每个函数都包含两个⾮继承⽽来的⽅法:apply()和call()。这两个⽅法的⽤途都是在特定的域中调⽤函数(看到这⾥⽊有看懂);其真正强⼤之处在于能够扩充函数赖以运⾏的作⽤域
关于JavaScript函数内部属性和函数⽅法的相关知识,⼩编就给⼤家介绍这么多,希望对⼤家有所帮助!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论