javascript匿名函数与闭包


javascript匿名函数与闭包


匿名函数
1.就是没有名字的函数
(function(x, y){
    alert(x + y);
})(2, 3);

创建了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数,并传入参数。



闭包
1.使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。
2.闭包说白了就是函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕(这点涉及JavaScript作用域链)。



JavaScript 自由变量
1.在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量。如下图:
2.要到创建这个函数的那个作用域中取值,(是“创建”,而不是“调用”),如:
var x=10;
function fn(){
	console.log(x);
}

function show(f){
	var x=20;

	(function(){
		f();
	})();
}

show(fn); //创建fn时,是在x=10的下一级作用域链中进行创建的




高阶函数
1.返回另一个函数的函数称为高阶函数
2.内部函数在没有任何局部声明之前(既不是被传入,也不是局部声明)使用的变量就是被捕获的变量。
3.变量的捕获发生在创建闭包的时候
function makeAdder(captured) {
    return function(free) {
        var ret = free + captured;
        console.log(ret);
    }
}

var add10 = makeAdder(10);

add10(2); // 输出:12


1.外部函数中的变量captured被执行加法的返回函数捕获,内部函数从未声明过captured变量,却可以引用它。
2.要到创建这个函数的那个作用域中取值,(是“创建”,而不是“调用”)
var a = 10;
function fn() {
    var b = 20;
    function bar() {
        console.log(a + b);
    }
    return bar;
}
var x = fn();
b = 200;
x(); //30

创建时a=10,b=20

参考原文: http://www.cnblogs.com/wangfupeng1988/p/3992795.html

猜你喜欢

转载自huangyongxing310.iteye.com/blog/2327320