Хорошо, большинство вещей должно быть ясным до сих пор ... сложной частью является SQL: если она на самом деле не работает в другом потоке или процессе во всей полноте, SQL-исполнение должно быть разбито на отдельные этапы (с помощью процессора SQL, выполненного для асинхронного выполнения!), где выполняются неблокирующие, а блокирующие (например, спящий) на самом деле могут переноситься в ядро (в качестве прерывания / событие) и поместить в список событий для основного цикла.
Это означает, например, интерпретация SQL и т. д. выполняется немедленно, но во время ожидания (хранится как событие, которое должно появиться в будущем ядром в некоторой структуре kqueue, epoll, ... вместе с другими операциями ввода-вывода) основной цикл может делать другие вещи и, в конечном счете, проверять, произошло ли что-то из этих IO и ждет.
Итак, чтобы перефразировать его снова: программа никогда не (заводится) застревать, сонные вызовы никогда не выполняются. Их долг выполняется ядром (пишите что-нибудь, ждите, что что-то придет через сеть, ожидая времени, чтобы пройти) или другого потока или процесса. - Процесс узла проверяет, завершено ли по крайней мере одна из этих обязанностей ядром в единственном блокирующем вызове ОС один раз в каждом цикле цикла событий. Эта точка достигнута, когда все неблокирование выполнено.
Удалить? : -)
Я не знаю Узел. Но откуда берется c.query?
Поскольку 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
).
, что они означают, нет, вы не можете. нет способа сделать это. так что вы могли бы сделать что-то вроде этого
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.
a = 'varname';
str = a+' = '+'123';
eval(str)
alert(varname);
Попробуйте это ...
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)
Это пример:
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.
Если вы не хотите использовать глобальный объект, например window или global (node), вы можете попробовать что-то вроде этого:
var obj = {};
obj['whatever'] = 'There\'s no need to store even more stuff in a global object.';
console.log(obj['whatever']);
В 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"]);
eval
является одним из вариантов.
var a = 1;
var name = 'a';
document.write(eval(name)); // 1
Вы можете использовать объект окна, чтобы добраться до него.
window['myVar']
window
имеет ссылку на все глобальные переменные и глобальные функции, которые вы используете.
Просто не знаю, что плохой ответ получает так много голосов. Это довольно простой ответ, но вы делаете его сложным.
// 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);
Мне нужно было нарисовать несколько FormData «на лету» и объектный способ работал хорошо
var forms = {}
Тогда в моих циклах мне нужно было создать данные формы, которые я использовал
forms["formdata"+counter]=new FormData();
forms["formdata"+counter].append(var_name, var_value);