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

javascript 闭包的一个例子

<html>
<title></title>
<head>
?
<script type="text/javascript">
?(function(msg) {
???? alert(msg);
? })('hello');

</script>
</head>
</html>

?

?

以上代码将会弹出hello窗口

?

以上代码实际上是定义了一个匿名函数,并且调用了该匿名函数

1 楼 mabusyao 2011-03-09  
闭包:可以用一个概念本身来定义该概念。

LZ的例子似乎有那么点不恰当。。。
2 楼 superobin 2011-03-09  
虽然勉强可以算是闭包,但是基本没有体现闭包的特性额
var closure = (function() {
    var a = 3;
    return function() {
        alert(a);
    };
})();
closure();//3

这个或许可以再深入一点?
3 楼 kidneyball 2011-03-09  
闭包是“带有自由变量的函数”。楼上的例子是闭包(带有自由变量a),但楼主的例子不是闭包,只是“函数字面量”。
4 楼 zk1878 2011-03-09  
呵呵,是我理解错了 ,谢谢各位指正
5 楼 zk1878 2011-03-09  
mabusyao 写道
闭包:可以用一个概念本身来定义该概念。

LZ的例子似乎有那么点不恰当。。。

谢谢,指正 ,是我理解错了
6 楼 suiye007 2011-03-10  
superobin 写道
虽然勉强可以算是闭包,但是基本没有体现闭包的特性额
var closure = (function() {
    var a = 3;
    return function() {
        alert(a);
    };
})();
closure();//3

这个或许可以再深入一点?

我不明白你的代码与下面的代码有什么区别呢,或简单的说是优点呢?
var closure = function() {
    var a = 3;
    return function() {
        alert(a);
    };
};
closure();//3
7 楼 kidneyball 2011-03-10  
suiye007 写道
superobin 写道
虽然勉强可以算是闭包,但是基本没有体现闭包的特性额
var closure = (function() {
    var a = 3;
    return function() {
        alert(a);
    };
})();
closure();//3

这个或许可以再深入一点?

我不明白你的代码与下面的代码有什么区别呢,或简单的说是优点呢?
var closure = function() {
    var a = 3;
    return function() {
        alert(a);
    };
};
closure();//3


下面的代码调用closure()得到的结果不是3,而是一个闭包。上面的代码closure本身就是闭包,调用这个闭包得到结果3
8 楼 suiye007 2011-03-11  
kidneyball 写道
suiye007 写道
superobin 写道
虽然勉强可以算是闭包,但是基本没有体现闭包的特性额
var closure = (function() {
    var a = 3;
    return function() {
        alert(a);
    };
})();
closure();//3

这个或许可以再深入一点?

我不明白你的代码与下面的代码有什么区别呢,或简单的说是优点呢?
var closure = function() {
    var a = 3;
    return function() {
        alert(a);
    };
};
closure();//3


下面的代码调用closure()得到的结果不是3,而是一个闭包。上面的代码closure本身就是闭包,调用这个闭包得到结果3

谢谢,发现问题所在了,我取的时候也是3,是New一个对象,然后,apply的,直接调用确实不是,不过,我有点不太明白什么时候要用闭包,什么时候不要用,虽然我的程序中闭包用得也比较的多,那是不得已的时候才用的 ,能给点经验吗?
9 楼 kidneyball 2011-03-11  
suiye007 写道