为了账号安全,请及时绑定邮箱和手机立即绑定

关于javascript闭包的问题

关于javascript闭包的问题

哔哔one 2018-12-06 11:16:05
    //删除某一购物车中的商品。    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值? 求解!
查看完整描述

4 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

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

查看完整回答
反对 回复 2018-12-24
?
慕神8447489

TA贡献1780条经验 获得超1个赞

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

查看完整回答
反对 回复 2018-12-24
?
Helenr

TA贡献1780条经验 获得超4个赞

//删除某一购物车中的商品。
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));
},
查看完整回答
反对 回复 2018-12-24
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

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

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

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

查看完整回答
反对 回复 2018-12-24
  • 4 回答
  • 0 关注
  • 675 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信