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