为什么我的JavaScript代码表现很奇怪?

Run*_*ion 1 javascript

有人可以解释为什么删除工作在第二个功能不在第一个?

var myFunction = (function (val) {
    delete val;
    return val;
})(10);
console.log(myFunction);


var myFunction1 = (function () {
    myVar = "test"
    delete myVar;
    return myVar;
})();
console.log(myFunction1);
Run Code Online (Sandbox Code Playgroud)

Gur*_*ngh 5

删除操作符用于删除属性,而不是对象.

在第一个函数中,val是一个变量,永远不能删除.但是在function2 myVar中使用简写来声明在全局对象上创建属性,并且可以删除属性.实际上这是删除操作符的主要目的.

delete运算符也返回一个布尔值.您可以使用它来更好地理解它是如何工作的,例如:在您的情况下,console.log(delete val);将打印false console.log(delete myVar);并将打印为true.还值得记住的是,返回值是基于对象之后是否存在,而不是删除是否成功.