匿名函数

典型函数声明:

function functionName(arg1, arg2, arg3) {
    //函数体...
}

函数表达式的形式定义函数:

var functionName = function (arg1, arg2, arg3) {
     //函数体...  
};

区别:
1. 函数声明给函数指定了名称,而函数表达式形式是创建了一个匿名函数,并赋值给一个变量。
2. 函数声明会在代码被执行前加载到作用域中,而函数表达式则在代码执行到时才会有定义。

递归

定义:递归函数是在函数通过名字调用自身情况下构成。

function functionName(num) {
    if (num < 1) {
        return 1;
    } else {
        return num * arguments.cellee(num - 1);
    }
}
alert(functionName(4)); // 24

闭包

定义:有权访问另一个函数作用域中变量的函数。

创建闭包的常见方式,就是在一个函数内部创建另一个函数。

详细见:深入理解javascript闭包

模仿块级作用域
通常一称为私有作用域

(function(){
    alert(1); //这里是块级作用域
})();

以上代码立即调用了一个匿名函数。
将函数调用包含在圆括号中,表示实际上是一个函数表达式。而紧随其后的另一对圆括号会立即调用这个函数。

function createFunction(count) {
    (function (){
        for (var i =1; i < count; i++) {
            alert(i);
        }
    })();
    alert(i); //错误!
}

这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。

过多的变量和函数,会导致命名冲突。
通过创建私有作用域,开发人员既可以使用自己的变量,又不会担心搞乱全局作用域。

私有变量

function MyObject() {
    var name = 'Lishuming';
    this.getName = function () {
        return name;
    };
    this.setName = function (value) {
        name = value;
    };
}
var myobj = new MyObject();
alert(myobj.getName());
myobj.setName('Gerl');
alert(myobj.getName());

 

posted @ 2012-10-28 22:02  骑着上帝流浪  阅读(151)  评论(0编辑  收藏  举报