Обработать аргумент функции как имя массива [duplicate]

Хорошо, большинство вещей должно быть ясным до сих пор ... сложной частью является SQL: если она на самом деле не работает в другом потоке или процессе во всей полноте, SQL-исполнение должно быть разбито на отдельные этапы (с помощью процессора SQL, выполненного для асинхронного выполнения!), где выполняются неблокирующие, а блокирующие (например, спящий) на самом деле могут переноситься в ядро ​​(в качестве прерывания / событие) и поместить в список событий для основного цикла.

Это означает, например, интерпретация SQL и т. д. выполняется немедленно, но во время ожидания (хранится как событие, которое должно появиться в будущем ядром в некоторой структуре kqueue, epoll, ... вместе с другими операциями ввода-вывода) основной цикл может делать другие вещи и, в конечном счете, проверять, произошло ли что-то из этих IO и ждет.

Итак, чтобы перефразировать его снова: программа никогда не (заводится) застревать, сонные вызовы никогда не выполняются. Их долг выполняется ядром (пишите что-нибудь, ждите, что что-то придет через сеть, ожидая времени, чтобы пройти) или другого потока или процесса. - Процесс узла проверяет, завершено ли по крайней мере одна из этих обязанностей ядром в единственном блокирующем вызове ОС один раз в каждом цикле цикла событий. Эта точка достигнута, когда все неблокирование выполнено.

Удалить? : -)

Я не знаю Узел. Но откуда берется c.query?

264
задан user2864740 29 August 2014 в 06:38
поделиться

11 ответов

Поскольку ECMA- / Javascript - это все Objects и Contexts (которые также являются некоторыми объектами Object), каждая переменная хранится в такой переменной Variable (или в случае функции, объекта активации).

Итак, если вы создаете такие переменные:

var a = 1,
    b = 2,
    c = 3;

В глобальной области контекста (= NO) вы неявно записываете эти переменные в объект Global (= window в браузере).

Доступ к ним можно получить с помощью обозначения «точка» или «скобка»:

var name = window.a;

или

var name = window['a'];

работает только для глобального объекта в этом конкретном экземпляре, поскольку объект Variable Object глобального объекта является объектом window. Внутри контекста функции у вас нет прямого доступа к объекту активации. Например:

function foobar() {
   this.a = 1;
   this.b = 2;

   var name = window['a']; // === undefined
   alert(name);
   name = this['a']; // === 1
   alert(name);
}

new foobar();

new создает новый экземпляр самоопределяемого объекта (контекста). Без new область действия функции также будет global (= окно). В этом примере будут предупреждены undefined и 1 соответственно. Если бы мы заменили this.a = 1; this.b = 2 на:

var a = 1,
    b = 2;

Оба вывода оповещений были бы неопределенными. В этом случае переменные a и b будут храниться в объекте активации из foobar, к которому мы не можем получить доступ (конечно, мы могли бы получить доступ к ним напрямую, вызывая a и b).

283
ответ дан McGarnagle 24 August 2018 в 05:24
поделиться

, что они означают, нет, вы не можете. нет способа сделать это. так что вы могли бы сделать что-то вроде этого

function create(obj, const){
// where obj is an object and const is a variable name
function const () {}

const.prototype.myProperty = property_value;
// .. more prototype

return new const();

}

, имеющее функцию создания так же, как и в ECMAScript 5.

3
ответ дан Alfgaar 24 August 2018 в 05:24
поделиться
a = 'varname';
str = a+' = '+'123';
eval(str)
alert(varname);

Попробуйте это ...

27
ответ дан amitchd 24 August 2018 в 05:24
поделиться

eval () не работал в моих тестах. Но добавление нового кода JavaScript в дерево DOM возможно. Итак, вот функция, которая добавляет новую переменную:

function createVariable(varName,varContent)
{
  var scriptStr = "var "+varName+"= \""+varContent+"\""

  var node_scriptCode = document.createTextNode( scriptStr )
  var node_script = document.createElement("script");
  node_script.type = "text/javascript"
  node_script.appendChild(node_scriptCode);

  var node_head = document.getElementsByTagName("head")[0]
  node_head.appendChild(node_script);
}

createVariable("dynamicVar", "some content")
console.log(dynamicVar)
0
ответ дан Axel Heider 24 August 2018 в 05:24
поделиться

Это пример:

for(var i=0; i<=3; i++) {
    window['p'+i] = "hello " + i;
}

alert(p0); // hello 0
alert(p1); // hello 1
alert(p2); // hello 2
alert(p3); // hello 3

Другой пример:

var myVariable = 'coco';
window[myVariable] = 'riko';

alert(coco); // display : riko

Итак, значение « coco » myVariable становится переменной coco.

Поскольку все переменные глобальной области действия являются свойствами объекта Window.

19
ответ дан Azodium 24 August 2018 в 05:24
поделиться

Если вы не хотите использовать глобальный объект, например window или global (node), вы можете попробовать что-то вроде этого:

var obj = {};
obj['whatever'] = 'There\'s no need to store even more stuff in a global object.';

console.log(obj['whatever']);
3
ответ дан Brent Barbata 24 August 2018 в 05:24
поделиться

В Javascript вы можете использовать тот факт, что все свойства являются парами ключевых значений. jAndy уже упоминал об этом, но я не думаю, что его ответ показывает, как его можно использовать.

Обычно вы не пытаетесь создать переменную для хранения имени переменной, но пытаетесь сгенерировать имена переменных, а затем использовать их. PHP делает это с записью $$var, но Javascript не нуждается в том, что ключи свойств взаимозаменяемы с ключами массива.

var id = "abc";
var mine = {};
mine[id] = 123;
console.log(mine.abc);

дает 123. Обычно вы хотите построить переменную, поэтому есть косвенность, так что вы также можете сделать это наоборот.

var mine = {};
mine.abc = 123;
console.log(mine["a"+"bc"]);
11
ответ дан David Newcomb 24 August 2018 в 05:24
поделиться

eval является одним из вариантов.

var a = 1;
var name = 'a';

document.write(eval(name)); // 1
122
ответ дан erickb 24 August 2018 в 05:24
поделиться

Вы можете использовать объект окна, чтобы добраться до него.

window['myVar']

window имеет ссылку на все глобальные переменные и глобальные функции, которые вы используете.

58
ответ дан Sebastian Palma 24 August 2018 в 05:24
поделиться

Просто не знаю, что плохой ответ получает так много голосов. Это довольно простой ответ, но вы делаете его сложным.

// If you want to get article_count
// var article_count = 1000;
var type = 'article';
this[type+'_count'] = 1000;  // in a function we use "this";
alert(article_count);
29
ответ дан shkschneider 24 August 2018 в 05:24
поделиться

Мне нужно было нарисовать несколько FormData «на лету» и объектный способ работал хорошо

var forms = {}

Тогда в моих циклах мне нужно было создать данные формы, которые я использовал

forms["formdata"+counter]=new FormData();
forms["formdata"+counter].append(var_name, var_value);
2
ответ дан Talha 24 August 2018 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: