Если вы создаете таблицы, представления и т. Д. На лету (кроме табличных переменных или временных таблиц), вам, возможно, придется по-настоящему переосмыслить свой дизайн. Это не то, что обычно должно происходить из пользовательского интерфейса. Даже если вы должны разрешить некоторую настройку, операторы DDL не должны выполняться одновременно с выполнением транзакционных вставок / обновлений / удалений. Гораздо лучше разделить эти функции.
Это также то, что требует разумной дозы рассмотрения и проверки того, что происходит, когда два пользователя одновременно пытаются изменить структуру одной и той же таблицы и затем выполнить транзакцию для вставки данных. Есть некоторые действительно страшные вещи, которые могут случиться, когда вы позволяете пользователям вносить изменения в структуру вашей базы данных.
Кроме того, некоторые операторы DDL всегда должны быть первым оператором пакета. Обращайте на это внимание и во время их запуска.
См. Эту статью на alistapart.com . (Ed: Статья была обновлена с момента первоначальной ссылки)
self
используется для сохранения ссылки на исходный this
, даже когда контекст меняется. Этот метод часто используется в обработчиках событий (особенно в замыканиях).
Изменить: Обратите внимание, что использование self
теперь не рекомендуется, поскольку window.self
существует и имеет потенциал вызвать ошибки, если вы не будете осторожны.
То, что вы называете переменной, не имеет особого значения. var that = this;
нормально, но в названии нет ничего волшебного.
Функции, объявленные внутри контекста (например, обратные вызовы, замыкания), будут иметь доступ к переменным / функциям, объявленным в той же области или выше.
Например, простой обратный вызов события:
function MyConstructor (options) {let that = this; this.someprop = options.someprop || 'defaultprop'; document.addEventListener ('щелчок', (событие) => {предупреждение (that.someprop);}); } new MyConstructor ({someprop: "Hello World"});
Переменная захватывается встроенными функциями, определенными в методе. this
в функции будет ссылаться на другой объект. Таким образом, вы можете сделать так, чтобы функция содержала ссылку на this
во внешней области видимости.
Да, вы увидите это везде. Часто that = this;
.
Видите, как self
используется внутри функций, вызываемых событиями? У них будет собственный контекст, поэтому self
используется для хранения this
, которое вошло в Note ()
.
Причина self
по-прежнему доступен для функций, даже если они могут выполняться только после завершения выполнения функции Note ()
, поскольку внутренние функции получают контекст внешней функции из-за закрытия ].