JavaScript 高级篇之函数 (四)

  1、函数的创建

  由于前面已经用了很多的函数,我就不在这里多分享了。

  2、嵌套函数

  

复制代码 代码如下:

  function china()

  {

  function people()//嵌套函数,只有china用它

  {

  document.write("我的心愿是当杜甫,最近网上他的漫画,他活的好潇洒");

  }

  people();

  }

  3、函数的直接量

  Javascript允许函数用直接量来定义,说白了就是一个表达式,(匿名函数)。细节:匿名函数以后会用,要明白!

  

复制代码 代码如下:

  function china(people) //函数声明

  {

  return peole;

  }

  var fun = function(people){return people;};//通过表达式声明。效果等同

  4、函数的参数(这里大家要注意)

  当你调用一个函数的参数少于声明的参数个数是,其它的参数就是一个undefined的值。

  

复制代码 代码如下:

  //打印函数

  function displayArray(arr)

  {

  if(!arr)return;

  for(var num =0;num<arr.length;num++)

  {

  document.write("Num is "+ arr[num]+ "\t");

  }

  document.write(" "+"<br />");

  }

  var array = [2,32,14,57,6];

  function borrowArray(from,/*optional*/to)

  {

  if(!to) to = []; //to = to||[] 效果是等同的

  for(var element in from) //使用枚举遍历数组

  to.push(from[element]);//将元素添加到数组

  return to;//返回

  }

  var returnnumber = borrowArray(array);//执行

  displayArray(returnnumber);//打印

  //输出:Num is 2 Num is 32 Num is 14 Num is 57 Num is 6

  5、可变的参数(Arguments 对象)

  第一次看到这里我也晕了,怎么参数还变的呢,多白了,这个argument对象就是函数参数的管理者,比如你有一个函数,定义了3个参数,那argument就有一个和你定义的参数,一样的数据集。

  要注意:arguments标识符在函数体内才有效的。你也可以就把它当成是函数的属性吧!

  

复制代码 代码如下:

  function checkArgument(x,y,z)

  {

  if(arguments.length != 3) throw new Error("参数不匹配"); //检查参数是否合法,挺好用吧!

  return x+y+z;

  }

  下面的例子是一个比较数字大小的例子,参数是可以变的。

  

复制代码 代码如下:

  function compareMaxNumber()

  {

  var temp = Number.NEGATIVE_INFINITY;//表示javascript最小的复数

  for(var arg=0;arg<arguments.length;arg++)

  {

  if(arguments[arg]>temp) temp = arguments[arg];

  }

  return temp; //返回参数中最大的数字

  }

  document.write(compareMaxNumber(2,34,5,23,766,1000)+"<br />");//这里的参数可以有很多,输出1000

  6、将对象属性作为参数

  

复制代码 代码如下:

  function displayArray(arr) //打印函数

  {

  if(!arr)return;

  for(var num =0;num<arr.length;num++)

  {

  document.write("Num is "+ arr[num]+ "\t");

  }

  document.write(" "+"<br />");

  }

  //

  function copyArray(from,from_start,to,to_start,length)//复制数组

  {

  for(var i = from_start; i <length;i++)

  {

  to.push(from[i]);//填充

  }

  return to;

  }

  //getArray 接受对象

  function getArray(objarray)

  {

  //再次封装,调用copyArray

  return copyArray(objarray.from,objarray.from_start ||0,objarray.to|| [],objarray.to_start ||0,objarray.length);//这里用了一点技巧。

  }

  var arr1 = [1,2,3,4,5];

  displayArray(getArray({from:arr1,length:4}));

  6、作为数据的函数

  

复制代码 代码如下:

  function add(x,y){return x + y;}

  function multply(x,y){return x*y;}

  function cut(x,y){return x -y ;}

  operator(operator1,operator2,operator3)//接收3个参数,可以把函数作为参数使用。

  {

  return operator1(operator2,operator3);//执行的是add();

  }

  document.write(operator(add,operator(multply,2,4),operator(cut,12,2)));//输出18了

  7、作为方法的函数

  这里说的方法不过就是把函数存储在对象的属性里面,然后通过属性来调用,函数可以赋给任何变量。

  

复制代码 代码如下:

  var obj = {};

  function display() //(something) 带参数

  {

  return "Love";//something;

  }

  obj.method = display;//使用对象的直接量赋值。

  obj.method();//调用。obj.method("Love");

  其实javascript也引用了this关键字。大家要记住其实调用方法的对象就是this的值。Object.method(); 这里Object就是对象,自然也就this的值了。

  

复制代码 代码如下:

  var privatename =

  {name:"Frank",

  age:21,

  sex:'男',

  display:function()

  {document.write("my name is:"+this.name+"\t age :"+this.age)}};

  privatename.display(); //输出 name is:Frank age :21

  8、构造函数

  构造函数是初始化一个对象的属性,并专门和new运算符一起使用的构造函数,new运算符创建一个对象,然后调用构造函数,把新创建的对象当this的值来传递,赋值。(要能理解)

  

复制代码 代码如下:

  function createProperty(name,version)//构造函数

  {

  this.name = name;

  this.version = version;

  }

  var tools = new createProperty("Multply",1.0);初始化,工具的名称,版本

  9、定义函数的属性

  当你需要使用一个全局不变值时,使用Function对象的属性将会很方便(以后创建命名空间,类的属性,其实都是寄托在这个上面)

  

复制代码 代码如下:

  createNamespace.name = "360buy.define";

  createNamespace.version = 1.2;

  function createNamespace()

  {

  document.write("名称空间:"+createNamespace.name +"版本:" + createNamespace.version);

  }

  createNamespace();//输出:名称空间:360buy.define版本:1.2

  10、方法apply()和call()

  使用这两个方法可以像调用其它对象的方法一样调用函数,两个方法第一参数都是要调用的对象,后面的参数是要调用的函数参数。

  

复制代码 代码如下:

  function applyCallOperator(args,args2)

  {

  document.write(args+"<br />");

  }

  var objpeople = {};

  applyCallOperator.apply(objpeople.Frank,[3,4]);//等同 applyCallOperator.call(objpeople.Frank,3,4) 前面就多[]

  objpeople.Frank();

  小结:这篇就像大家分享到这来吧,下一篇我们一起实现javascript类。