Javascript高级程序设计 笔记(二)

控制语句:

  for-in语句:java里面也有这样的用法了,C#里面是foreach;可以用propertyIsEnumerable()判断属性是否可以用for-in来访问

  with语句:指明作用域,由于运行缓慢,最好避免使用

  case-switch在java与javascript中的区别:对于判定的值是否是常量,java中是规定只能是常量,而javascript中可以用变量。java中不能用字符串判定,而javascript中可以

函数:

  返回值:如果函数没有明确的返回值,或调用了没有参数的return语句,那么它真正返回的值是undefined

  重载与arguments:javascript中没有重载的功能,后面的同名函数会覆盖前面的同名函数;但是我们可以利用arguments对象来做折衷处理(利用if-else判断参数个数类型等等),arguments对象是参数列表对象,可以获得参数的个数与具体的值。因为javascript不会验证参数的个数,函数会接受任意个数的参数而不引发错误,任何遗漏的参数会以undefined传递给函数,多余的参数会忽略。 

  函数也是个对象:函数类的创建方式: var function_name = new Function(argument1,argument2,...,arguementN,function_body);并且函数对象可以最为函数的参数传递给另一个参数;不过这种函数的定义方式比传统慢,所以平时不用这种定义方法。

  函数的方法:既然函数是一个对象,必须含有一些基本的方法与属性,就像java中每个类都继承了Object中的方法。length声明了函数期望的参数个数;valueOf与toString返回函数的源代码

  闭包:这两天看到了很多闭包的信息,看来应该是挺重要的知识。书上看不懂,直接从网上弄来一段话,讲得挺清楚的

闭包就是能够读取其他函数内部变量的函数。

由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。

所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

    网上的两段代码,表示了闭包的两个用处:

    一、读取函数内部的变量:通过f2来访问f1的内部变量,因为f2是f1的内部函数,所以知道f1的内部信息。f2是有f1通过返回值传递的。result也变成了一个函数

  function f1(){
    n=999;
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999

    二、这些变量的值始终保持在内存中

  function f1(){
    var n=999;
    nAdd=function(){n+=1}
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); // 1000

 转载的文章 http://www.felixwoo.com/archives/247

 

posted @ 2012-06-23 17:12  winnerX  阅读(143)  评论(0编辑  收藏  举报