javascript 函数

javascript最重要的几个部份:引用(reference),作用域(scope),闭包(closure)和上下文(context).
引用:一个对象实际位置的指针。实际对象不能被引用。当两个变量指向同一对象,对象的改变,指向它的两个变量也会改变,在实际应用中很少去改变被引用的对象,而用
push给数组象添加新的元素。
对于数组添加的值,实际是做为一个属性储存起来了。对于引用,只能指向具体对象,而不能层层引用。
当实际对象本身被改变了,但原来指向它的引用仍然保持指向旧的对象。
注意实际对象改变有两种形式:一种是自身的属性发生变化,没有使用new;一种自身改变使用到了new.
+=创建的是一个新的对象,而不是简单的字符加。
函数的重载:判断传入参数的数量和参数的类型。javascript的每一个函数都带有一个仅在这个函数范围内作用的变量(context variable)称为参数(argument),它是包含所有参数
的伪数组(pseudo-array)。之所以叫它伪数组是因为它具有数据的.length的属性和通过下标读取参数,但不具备push()等数组的操作方法.
typeof:只能用判断javascript的基础类型:number,string,undefined,object,boolean,function.如果对象为object或array类型时很难区分。这是要与用所有对象都带有构造
函数(constructor)。注意使用不带括号的函数是引用指针,而不是调用方。
声明函数与表达式函数的区别:声明函数在代码执行前,读取;函数表达式在执到它是执行。
函数有个callee属性指针,指向拥有arguments对象的函数(即本身)。对于引用类型来说,prototype保存所有实例方法真实所在。例:toString(),valueOf()都是保存在prototype
的名下,只不过通过各自对象的实例访问。
作用域:在javascript中,作用域不是以块来划分,而是是函数来划分。javascript有个有趣的特殊,所以有全局作用域的变量都是window对象属性(property).在函数
中定义变量,前面没有加 var 定义的都是全局作用域变量。
闭包(closure):内层函数可以引用外层包围它的函数变量,即使外层函数已经中止.特性一:curry化【通过将多个参数填充到函数体中,实现将函数转换为一个经过简化的函数的技术(使接收的函数越来越少。)】
特性二:将匿名函数将全局变量隐藏。
闭包的问题:闭包允许你引用父函数的值,但不是父函数创建时的值,而父函数的最终值。
作用域链的细节:当函数第一次被调用的时候,会创建一个执行环境,及相应的作用域链,将作用域链赋值给特殊属性scope.使用this,arguments等的值初始化函数活动对象
在作用域链中外部对象活动始终处于第二位

posted @ 2012-09-17 21:00  谭客  阅读(131)  评论(0编辑  收藏  举报