首页 新闻 搜索 专区 学院

关于javascript闭包的问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-04-21 09:34

    //删除某一购物车中的商品。
    delProduct: function (ol, shoppingCartID) {
        alert(shoppingCartID);
        jConfirm("您将要删除当前商品,是否确定?", "删除当前商品确认", function (d) {
            if (d) {
                alert(shoppingCartID);
                var shoppingCartIDs = new Array();
                shoppingCartIDs.push(shoppingCartID);
                sCart._delProducts(shoppingCartIDs);
            }
        });
    },

 

为啥第二个alert的值是上一次执行delProduct方法时的shoppingCartID值?

求解!

有容乃大的主页 有容乃大 | 初学一级 | 园豆:3
提问于:2011-10-18 10:26
< >
分享
最佳答案
0

闭包,是内部函数能够访问外部函数的变量。比如说,在解析外部函数的时候,事实上,是通过一级一级去寻找变量的。内部函数会先遍历它自己的作用于范围内的变量,找完之后,会找它父作用域范围内的变量。所以你在内部函数会读到外部函数的变量值。建议楼主好好研究一下js变量的作用域跟数据存储方式。

收获园豆:5
ljcheibao | 初学一级 |园豆:132 | 2012-01-29 15:48
其他回答(3)
0

看你那个function(d)是什么条件

sunlary | 园豆:934 (小虾三级) | 2011-10-18 11:06
0
//删除某一购物车中的商品。
delProduct: function (ol, shoppingCartID) {
alert(shoppingCartID);
jConfirm("您将要删除当前商品,是否确定?", "删除当前商品确认", (function(sCartID){ return function (d) {
if (d) {
alert(sCartID);
var shoppingCartIDs = new Array();
shoppingCartIDs.push(sCartID);
sCart._delProducts(shoppingCartIDs);
}
})(shoppingCartID));
},
小小刀 | 园豆:1991 (小虾三级) | 2011-10-23 11:13
0

delProduct: function (ol, shoppingCartID) {
        alert(shoppingCartID);
        jConfirm("您将要删除当前商品,是否确定?", "删除当前商品确认", function (d) {
            if (d) {
                alert(shoppingCartID);

第一个alert.shoppingCartID 和 第二个alert.shoppingCartID 作用域都是 相对于delProduct ; 

二个alert的值是上一次执行delProduct方法时的shoppingCartID值,这是正常的,要是不相等 那就不正常了

收获园豆:5
王那个锋啊 | 园豆:311 (菜鸟二级) | 2012-01-13 15:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册