日期:2014-05-16  浏览次数:20415 次

JavaScript函数学习小结
函数的定义方式:
1.函数语句
function f(x) {
  return x*x;
}
2.调用构造函数
var f = new Function('x', 'x*x');
3.函数直接量
var f = function(x) {
  return x*x;
}
说明:以上三种方式都定义了函数f,但是对于方式2,3调用语句必须在函数定义之后


JavaScript执行顺序参考:
http://www.oncoding.cn/2009/javascript_execution_sequence/
JavaScript线程问题参考:
http://blog.csdn.net/turkeyzhou/article/details/2784934


函数本身也是一种数据:
1.可以赋值给变量
2.可以赋值给对象属性
3.可以作为其他函数的参数


函数的作用域与变量作用域一样:
1.顶级函数作用域为全局window
2.嵌套函数作用域为外部函数内,在外部函数之外不可见


函数的实际参数对象arguments:
1.每个函数内部都有一个特殊变量arguments,它包装了所有传入函数的参数,arguments[0]标识第一个参数,依次类推;
2.arguments的length属性值为实际的参数个数
3.arguments的callee属性值为函数本身,可以用来定义匿名递归函数,如:
var f = function(n) {
  if (n == 1) return 1;
  return arguments.callee(n - 1) * n; 
}


函数的内部属性和方法:
1.length属性,属性值为函数定义参数个数
function f(x, y) {} //f.length为2
2.prototype属性,引用函数的预定义原型对象,当函数作为构造函数创建对象时,创建的对象自动继承其原型对象的属性和方法
3.apply和call方法,类似Java方法的反射调用方法,他们的第一个参数为调用该函数的对像,即函数内部this引用的对象;
call方法的其他参数均为函数调用参数,个数不定;而apply方法的第二个参数(如果有)则为数组,数组元素为对应的函数调用参数