函数
1.函数定义产生的初始值 可以用函数对象的参数 arguments.length确定有多少个参数。
2.内嵌的函数一般只能在函数内部调用,不可以在函数外部调用。(类似有作用域)。但是对于条件函数及 在If的某个分支中定义的函数时没有作用域的,可以在这个分支外面调用。
3. 函数和函数表达式的区别
函数语句: function A(){}
函数表达式: var A=function(){}
var B=function A(){}
区别:(1)在调用之前,建立作用域时,函数语句会被声明 并将A指向函数的引用,但是函数表达式只会申明变量A 并赋值为undefined,对匿名函数是执行时在申明。
(2)函数语句 的定义语句和变量申明语句相似有提顶功能,当先调用,再执行时同样也是可行的。
(3)对于内存管理和垃圾回收方面的区别
函数表达式,是把表达式赋值给一个对象,该变量是函数表达式的唯一引用,因此通过将该变量赋值为null时,就无法访问这个表达式,符合垃圾回收机制,会将函数表达式删除。
函数语句定义的函数,它是以对象的形式独立存在的,无法删除。(delete是用来删除对象的对象,无法删除对象,可以通过删除对象的引用,让对象达到可以被回收的要求)
将函数赋值给一个变量时,这时B其实有A的一个副本,将变量B不可用或者=NULL,函数A仍然可以用 ,A 和B不是指向同一个函数。B是指向A的副本,B如何变动对A没有影响。
4.匿名函数
形如 function(){} 是没有名字的函数。匿名自执行函数是在定义时将参数传入到函数中。
好处:可以形成一个命名空间,防止空间污染。
5. 全局变量和局部变量
当同时存在全局变量和局部变量时,在函数内部 局部变量会覆盖全局变量。当多次定义局部变量时,其实是一个覆盖的过程,如果重新定义个已经定义的变量,其实在查找的时候的是同一个,关键看有没有赋值将原来的值覆盖掉了。
6. 闭包
闭包:闭包是一个函数,是在一个特定环境(及他的外函数)中运行的函数。对于环境中的一些变量,当调用这个函数时,这些变量任然可以用。
闭包函数:当一个函数作为参数传入或者作为返回值返回时,都是闭包函数。
闭包常见的错误:待续