javascript函数
Posted 生如夏花2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript函数相关的知识,希望对你有一定的参考价值。
1、function对象的加载
每个函数都是Function对象的实例,而且与其他引用类型具有相同的属性和方法。函数是对象,函数名实际上是指向函数对象的一个指针,不会与函数绑定。
函数名是一个指向函数的指针,所以不会有重载同时参数传递也是一个arguments对象来保存所有参数,无法通过签名来判断是否重载
在函数加载中解析器会预先读取函数的声明,以至于所有代码都能够使用到函数;而如果是声明对象的话则是要按照顺序进行解析
<html>
<head>
<title>jsTest</title>
<script type="text/javascript">
/*
这个显然说明js在加载函数时,是先加载函数声明后保证在任何地方都能够使用。
*/
alert(sum(100,200));
function sum(num1,num2)
{
return num1+num2;
};
/*
下面的语句就会出现错误,因为解析器是下加载函数声明,而var sum=function(sum1,sum2)不是函数声明,是变量sum的初始化对象
*/
alert(sum(100,200));
var sum=function(num1,num2)
{
reutrn sum1+sum2;
};
</script>
</head>
<body>
</body>
</html>
2、函数实际上也是一个变量,所以函数可以作为另一个函数的参数,也可以作为返回值。
<html>
<head>
<title>jsTest</title>
<script type="text/javascript">
/*
显然desc函数作为sum函数的一个参数,返回值也是desc函数运行之后的返回值
*/
alert(sum(desc,100,200));
function desc(num1,num2)
{
if(num1>num2)
{
return num1-num2;
}
else{
return num2-num1;
}
}
function sum(desc,num1,num2)
{
return desc(num1,num2);
}
</script>
</head>
<body>
</body>
</html>
3、函数的内部属性:arguments和this
arguments属性是一个类似数组对象,主要用于保存函数的参数。arguments还有一个callee的属性,该属性可以在递归的时候解除函数体与函数名的紧密耦合。
arguments.callee和函数名指向的是同一个函数实体,即
function factority(num)
{
if(num<=1)
{
return 1;
}
return num*arguments.callee(num-1);//在这儿arguments相当于函数factority的别名,这条语句等价于num*factority(num-1);
}
<html>
<head>
<title>jsTest</title>
<script type="text/javascript">
/*
显然desc函数作为sum函数的一个参数,返回值也是desc函数运行之后的返回值
*/
alert(factorial(5));
function desc(num1,num2)
{
if(num1>num2)
{
return num1-num2;
}
else{
return num2-num1;
}
};
function sum(desc,num1,num2)
{
return desc(num1,num2);
};
function factorial(num)
{
if (num<1) {return 1}
else
{
return num*arguments.callee(num-1);
}
}
</script>
</head>
<body>
</body>
</html>
4、函数的属性length表示希望接受的参数的数目,而不是实际接收的参数个数。对于对象而言, prototype属性是用来保存方法的。
apply()和call()方法用来改变函数的作用域
函数通过调用call方法可以在不同的作用域中运行
var color="red";
var o={color:"blue"};
function saycolor()
{
alert(this.color):
}
saycolor.call(this);//red
saycolor.call(window);//red
saycolor.call(o);//blue
call函数用来定义作用域的,由于是在全局执行环境下运行,所以this指代的是window,而更改为o之后作用域对象就是o
bind()方法会创建一个函数的实例,然后并将作用域传递给新实例,也可以带有一个作用域的参数传递给新实例
var color="red";
var o={color:"blue"};
function sayColor()
{
alert(this.color);
}
sayColor1=sayColor.bind(o);//blue,这个将变量o作为执行环境的变量对象传递新函数实例
以上是关于javascript函数的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript-Runoob-JS函数:JavaScript 函数定义