关于javascript中delete的问题

菜鸟求轻拍。

function myFunction() {
    var add = (function() {
        var counter = 0;
        return function () { return counter += 1;}
    })();

    add();
    add();
    delete add;

    /*
    add = (function() {
        var counter = 0;
        return function () { return counter += 1;}
    })();
    */
    add();

    document.getElementById("demo").innerHTML = add();
}

为什么以上代码执行后,明明执行了delete,demo仍然显示为4?

而以下代码执行后,demo显示为2?

function myFunction() {
    var add = (function() {
        var counter = 0;
        return function () { return counter += 1;}
    })();

    add();
    add();
    delete add;

    add = (function() {
        var counter = 0;
        return function () { return counter += 1;}
    })();
    
    add();

    document.getElementById("demo").innerHTML = add();
}
阅读 3.1k
4 个回答

var声明的变量的不能被delete delete只能删除对象的属性或者数组的元素
你的第二段代码并不能说明你delete成功,只是你对add进行了重新赋值,又调用了两遍,所以是2

delete只能delete字段吧,比如delete a.b

delete是删除对象的属性,你想把function删除可以把它赋值空
add="";
第一个,执行了4次add()所以为4,
第二个,你重新把add赋值,counter变成0了,又执行两次add(),所以为2。

第一个:delete只能删除对象属性,不能删除通过var显示声明的变量。所以第一个,add方法并没有删除;
第二个:如楼上,重新赋值而已。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题