关于javascript闭包的问题

    //删除某一购物车中的商品。
    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值?

求解!

哔哔one
浏览 676回答 4
4回答

莫回无

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

慕神8447489

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

Helenr

//删除某一购物车中的商品。 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)); },

翻翻过去那场雪

delProduct: function (ol, shoppingCartID) {        alert(shoppingCartID);        jConfirm("您将要删除当前商品,是否确定?", "删除当前商品确认", function (d) {            if (d) {                alert(shoppingCartID); 第一个alert.shoppingCartID 和 第二个alert.shoppingCartID 作用域都是 相对于delProduct ;  二个alert的值是上一次执行delProduct方法时的shoppingCartID值,这是正常的,要是不相等 那就不正常了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript