javascript 闭包, 函数字面量

常见Javascript定义函数:

在Javascript定义一个函数一般有如下方式:

// 函数关键字(function)语句:
function fun(x){alert(x);}

// 函数字面量(Function Literals):
var fun = function(x){alert(x);}

//Function()构造函数:
var fun = new Function('x','alert(x);')

上面三种方法定义了同一个方法函数fun,第1种就是最常用的方法,后两种都是把一个函数复制给变量fun,而这个函数是没有名字的,即匿名函数。

闭包

先说说为什么 JS 可以闭包,因为 JS 的变量基于词法作用域。

动态作用域和词法域的区别是什么?

词法作用域

匿名函数,定义并执行

(function(args) {
   alert(args);
})('script'); 

匿名函数的链式调用

(function(args) {
    alert(args);
    return arguments.callee;
})(1)(2)(3);

闭包计数器

var uniqueInteger = (function(){
    var counter = 0;
    return function(){return counter++;};
}());

var al = function (){
    for(var i=0; i<10; i++){
        alert(uniqueInteger());
    }
}

al();

Javascript模块化编程(一):模块的写法

Javascript模块化编程(二):AMD规范

Javascript模块化编程(三):require.js的用法

JavaScript Module Pattern: In-Depth

向setTimeout传递函数参数

向setTimeout传递函数参数

Array.prototype.slice.call

你可能感兴趣的:(js闭包,函数字面量)