推荐好文:javascript的函数(5)

我们还可以或许在一个函数中嵌套一个函数。下例,我有一个叫做getHalfOf的函数,而在它内里,我有另一个叫做calculate的函数。

Example 7

Language:javascript, parsed in: 0.015 seconds, using GeSHi 1.0.7.12

function getHalfOf(num1, num2, num3)     

{

  function calculate(number)

  {

    return number/2;

  }

 

  var result="";

  result+=calculate(num1)+" ";

  result+=calculate(num2)+" ";

  result+=calculate(num3);

  return result;

}         

var resultString=getHalfOf(10,20,30);

alert(resultString);         // 输出 "5 10 15"

 

运行示例

你只能在内部挪用嵌套的函数。就是说,你不能这么挪用:getHalfOf.calculate(10),因为calculate只有当外部函数(getHalfOf())在运行的时候才会存在。这和我们前面的接头一致(函数会被编译,但只有当你去挪用它的时候才会执行)。

挪用哪个函数?

你也许正在想定名斗嘴的问题。好比,下面哪一个叫做calculate的函数会被挪用?

Example 8

Language:javascript, parsed in: 0.017 seconds, using GeSHi 1.0.7.12

function calculate(number)

{

  return number/3;

}

 

function getHalfOf(num1, num2, num3)     

{

  function calculate(number)

  {

    return number/2;

  }

 

  var result="";

  result+=calculate(num1)+" ";

  result+=calculate(num2)+" ";

  result+=calculate(num3);

  return result;

}         

var resultString=getHalfOf(10,20,30);

alert(resultString);         // 输出 "5 10 15"

 

运行示例

在这个例子中,编译器会首先搜索局部内存地点,所以它会利用内嵌的calculate函数。假如我们删除了这个内嵌(局部)的calculate函数,这个代码会利用全局的calculate函数。

函数:数据范例及结构函数

让我们来看看函数的另一个非凡成果--这让它和其它工具范例截然差异。一个函数可以或许用来作为一个数据范例的蓝图。这个特性凡是被用在面向工具编程中来模仿用户自界说数据范例(user defined data type)。利用用户自界说数据范例建设的工具凡是被成为用户自界说工具(user defined object)

数据范例

在界说了一个函数之后,我们也同时建设了一个新的数据范例。这个数据范例可以或许用来建设一个新工具。下例,我建设了一个叫做Ball的新数据范例。

Example DT1

Language:javascript, parsed in: 0.004 seconds, using GeSHi 1.0.7.12

function Ball()

{

}

var ball0=new Ball(); // ball0 此刻指向一个新工具

 

alert(ball0);         // 输出 "Object",因为 ball0 此刻是一个工具

 

运行示例

这样看来,ball0=new Ball()作了什么?new要害字建设了一个范例是Object的新工具(叫做ball0)。然后它会执行Ball(),并将这个引用传给ball0(用于挪用工具)。下面,你会看到这条动静:“creating new Ball”,假如Ball()实际上被运行的话。

Example DT2

Language:javascript, parsed in: 0.009 seconds, using GeSHi 1.0.7.12

function Ball(message)

{

  alert(message);

}

var ball0=new Ball("creating new Ball")// 建设工具并输出动静

ball0.name="ball-0";                      // ball0此刻有一个属性:name

alert(ball0.name);                        // 输出 "ball-0"

 

运行示例

我们可以把上面这段代码的高亮的一行看做是底下的代码高亮处的一个简写:

Language:javascript, parsed in: 0.011 seconds, using GeSHi 1.0.7.12

function Ball(message)

{

  alert(message);

}

var ball0=new Object();

ball0.construct=Ball;

ball0.construct("creating new ball")// 执行 ball0.Ball("creating..");

ball0.name="ball-0";                     

alert(ball0.name);         

 

运行示例

这行代码ball0.construct=Ball和中的ptr=myFunction语法一致。

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

转载注明出处:http://www.heiqu.com/8590.html