1

It seems in JavaScript you can’t delete function arguments but you can delete global variables from a function.

Why this behavior?

var y = 1;
(function (x) { return delete y; })(1); // true

(function (x) { return delete x; })(1); // false
1
  • 1
    Both return false in normal use (i.e. not within the Firebug or browser console, which use eval()). See my answer. Commented Aug 10, 2011 at 13:14

2 Answers 2

6

Actually, neither should return true, and indeed they don't in Firefox or Chrome (untested in other browsers). I imagine you tested this with Firebug or another browser console, which changes things due to the console using eval(). delete only deletes properties of an object and cannot normally delete a variable declared using var, whatever the scope.

Here's an excellent article by Kangax on the subject: http://perfectionkills.com/understanding-delete/

Sign up to request clarification or add additional context in comments.

Comments

4

Edit: Both return false in normal use (i.e. not within the Firebug or browser console, which use eval()). See Tim Down’s answer (it should be the accepted one).

1 Comment

Actually the first example doesn't work because y is declared using var and therefore has the [[DontDelete]] attribute (in ECMAScript 3: the equivalent attribute is [[Configurable]] is ECMAScript 5) set to true.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.