JavaScript之引用类型介绍(6)


function sum(num1,num2)
{
return num1 + num2;
}
alert(sum(10,10)); //20
var anotherSum = sum;
alert(anotherSum(10,10)); //20
sum = null;
alert(anotherSum(10,10)); //20


  注意:使用不带括号的函数名是访问函数指针,而非调用函数。

  函数声明与函数表达式
  目前为止,我们一直没有对函数声明和函数表达式加以区别。而实际上, 解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。

复制代码 代码如下:


alert(sum(10,10));
function sum(num1,num2)
{
return num1 + num2;
}


  以上代码完全可以正常运行。因为在代码开始执行之前,解析器就已经读取函数声明并将其添加到执行环境中了。如果像下面例子所示,把上面的函数声明改为变量初始化方式,就会在执行期间导致错误。

复制代码 代码如下:


alert(sum(10,10));
var sum = function(num1,num2)
{
return num1 + num2;
}


  作为值的函数
  因为JavaScript中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。

复制代码 代码如下:


function callSomeFunction(someFunction , someArgument)
{
return someFunction(someArgument);
}


  这个函数接受两个参数,第一个参数应该是一个函数,第二个参数应该是要传递给该函数的一个值。然后,就可以像下面的例子一样传递函数了:

复制代码 代码如下:


function add(num)
{
return num + 10;
}
var result = callSomeFunction(add,10);
alert(result); //20


  当然,可以从一个函数中返回另一个函数,而且这也是极为有用的一种技术。

复制代码 代码如下:


function createSumFunction()
{
return function(num1,num2){
return num1 + num2;
};
}
var sumFunction = createSumFunction();
alert(sumFunction(10,10)); //20


  函数内部属性
  在函数内部,有两个特殊的对象:arguments和this。其中,arguments是一个类数组对象,包含着传入函数中的所有参数,而且可以使用length属性来确定传递进来多少个参数。

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wddpzy.html