for...in    遍历对象,相当于C#的foreach;  for(var i in window){alert(i+=window[i]);}    
 in操作符左边要求必须是一个字符串或者是一个可以转化为字符串的量,右边必须是一个数组或者对象,F1()执行了F1函数的结果,返回的是一个对象,这个对象会被存储在内存中,所以第二次执行的时候会直接去取这个对象的值,而不是执行函数。。。 

arguments,JS不会验证传给函数的参数个数是否与定义相同,函数可以接受任意个数的参数,最多25个,遗漏的参数以undefined形式传送,多余的 参数被自动忽略。arguments.length;arguments[i],arguments不是一个真的数组,它包含了多余的参数;

"js预编译":同一script标签内js在运行前会预先编译“var”变量为undefined表示一种存在而不让报错,不只会按书写先后顺序执行。在执行过程中会按照书写顺序再把值赋予var变量

现在当前作用域内预编译var,执行时,先在本作用域找,找不到“才”去父作用域,,哪怕2个作用域定义了同一名字的变量
变量定义不加var就是全局变量

Javascript中,函数是一种类型,所以可以赋给某个变量;function xxxx(){} 定义了xxxx这个function类型  **

“定义式的函数语句会被提取出来优先执行”,function 变量在执行当中被预编译当成了代码值,执行对应函数名时,再执行相应代码。。可能用到 eval(),来使得字符可以成为可执行的方法 *****

*** 作用域{} (就是一个继承 Page51页,'{':block;)、函数function类型都是在编译定义时候就确定了值、作用域的,而var 变量是在执行时才赋予具体值。


call/apply  (调用对象执行另一对象的方法)   obj_1.call(obj_2,arg1,arg2...argn) 用对象obj_2来执行对象obj_1的构造函数,或者obj_1点出来的指定的函数;
apply则后面的参数为数组arguments; 将把传入对象作为this带入执行的方法。


var undefined;自动定义window.undefined的引用。。放在局部变量中,速度快

JavaScript中的代码只体现为一种形式,就是function。

var p={}; p.__proto__=person.prototype;对象的原型。。不可以外部访问。。firefox可以

原型对象+构造函数

this.base(); 调用基类构造函数  //??

事件对象 window.event/event;  如event.button=2 为鼠标右键属性  e || event;

js会自动给每行结尾加 ;

var aa= true && "string"; aa="string";左边为真则会得到字符串的值否则为false;都为真,再找值,有就返回。 || ,如果左边有值则为左边,没有再看右边,都为假才假。

var funcName=function(){}(); 加了最后的()后,将执行该函数,把函数的执行结果赋给funcName。

闭包:作用域链、作用域(scope)、活动对象(执行时,某个函数的活动对象,把arguments、形参、内部变量、内部函数都加到活动对象上);函数的作用域链是在“定义”时候确定的,函数内函数加()等,可以不止有一个闭包。
函数内函数只要在外部函数执行结束后继续执行,就是闭包,有自己的作用域链,直接访问外部函数活动对象的实际变量。

回调函数,作用域定义的时候确定


 

posted on 2011-04-06 23:41  LcKey  阅读(186)  评论(0编辑  收藏  举报