为什么我们不能使用delete运算符删除javascript中的函数?

时间:2017-04-02 05:25:37

标签: javascript delete-operator

var sum = function(a, b) {return a + b;};

var add = sum;

delete sum;

执行删除后,在控制台中返回False。理想情况下它应该返回True。 为什么不删除 sum 功能?

请注意,上面的代码是在Google Chrome浏览器控制台中执行的。

3 个答案:

答案 0 :(得分:1)

delete无法使用直接成员删除。

  

删除操作符从对象中删除属性。

由于您提供了sum而没有告诉您要从哪个对象中删除它。

你要找的是

delete window.sum

现在它从sum对象中移除了window:)

demo

enter image description here

答案 1 :(得分:1)

来自MDN

  

delete运算符从对象中删除给定属性。

     

如果您要删除的属性不存在,则删除将不起作用并返回true。

     

如果对象的原型链上存在具有相同名称的属性,则删除后,对象将使用原型链中的属性(换句话说,删除仅对自身属性有影响)

     

使用var声明的任何属性都不能从全局范围或函数范围中删除。

     

因此,delete不能删除全局范围内的任何函数(无论这是函数定义还是函数表达式的一部分)。

     

可以删除作为对象一部分的功能(除了全局范围)。

因此sum是一个附加到全局范围的函数,不能用delete删除。

答案 2 :(得分:0)

参考MDN

  • 删除操作符从对象中删除属性。
  • 使用var声明的任何属性都不能从全局范围或函数范围中删除。
  • 因此,删除不能删除全局范围内的任何函数(无论这是函数定义还是函数表达式的一部分)。
  • 可以删除作为对象一部分的功能(除全局范围外)。