var output = (function(x){
delete x;
return x;
})(0);
console.log(output);
Вопрос в следующем - почему x
не удаляется, ведь оно является свойством arguments
?
Оператор delete
может удалять только свойства объекта:
delete
эффективен только применительно к свойствам объектов. Он не оказывает никакого влияния на имена переменных и функций.
Источник.
А поскольку x
является записью Declarative Environment Record (очень грубо говоря - не является свойством объекта, а просто переменной), то и удалить переменную таким образом нельзя.
Более того, даже не всякое свойство объекта можно удалить при помощи оператора delete
(и я сейчас не о дескрипторах свойств, хотя это и самое очевидное). Например, нельзя удалить свойство глобального объекта, определенное не явно, а как переменная. Например:
var a = 1;
console.log(a === this.a); // `a` является свойством глобального объекта
delete a; //false
console.log(a); // 1
Однако:
this.a = 1;
console.log(a === this.a); // все еще равны
delete a; // true
console.log(a); // error
А разве x не является свойством псевдо-массива arguments?
Разумеется, является.
"use strict";
(function(x){
console.log(arguments[0]);
delete arguments[0];
console.log(arguments[0]);
console.log(x); // все еще есть!
}(0));
Но поскольку удалить можно только свойство объекта, то и обращаться нужно непосредственно к свойству объекта. Однако при помощи такого подхода вы и удалите только свойство объекта. А, поскольку локальные переменные (точнее говоря, формальные параметры функции) никак не связаны с объектом arguments
, то формальный параметр x
по-прежнему доступен (именно как локальная переменная, но не как свойство arguments
).
Виртуальный выделенный сервер (VDS) становится отличным выбором
Получается так что Vuex в Nuxt общий для всех подключенных пользователейКак сделать так что бы каждому пользователю отдавалась копия, а не оригинальный...
Здравствуйте! Помогите пожалуйстаКогда бутстрап карусель(слайд с ней) оказывается в правой части слик слайдера (после прокрутки)- она перестает...
Как реализовать выдачу рандомного кода с сервераТо есть при нажатии "получить код" происходила его выдача