Во всех этих сценариях outerScopeVar
изменяется или назначается значение асинхронно или происходит в более позднее время (ожидание или прослушивание какого-либо события), для которого текущее выполнение не будет ждать. Таким образом, все эти случаи текущего потока выполнения приводит к outerScopeVar = undefined
Давайте обсудим каждый пример (я обозначил часть, которая называется асинхронно или задерживается для возникновения некоторых событий):
1.
Здесь мы регистрируем eventlistner, который будет выполнен на этом конкретном событии. Загрузите изображение. Затем текущее выполнение будет продолжено со следующими строками img.src = 'lolcat.png';
и alert(outerScopeVar);
, между тем событие может не произойти. т. е. funtion img.onload
ожидают, что упомянутое изображение будет загружаться, как можно скорее. Это будет происходить во всем следующем примере: событие может отличаться.
2.
Здесь событие тайм-аута играет роль , который вызывается обработчиком по истечении указанного времени. Здесь 0
, но все же он регистрирует асинхронное событие, которое будет добавлено в последнюю позицию Event Queue
для выполнения, что делает гарантированную задержку.
3.
На этот раз ajax обратный вызов.
4.
Узел можно рассматривать как король асинхронного кодирования. Если отмеченная функция зарегистрирована как обработчик обратного вызова, которая будет выполнена после чтения указанного файла.
5.
Очевидное обещание (что-то будет сделано в будущем) является асинхронным. см. . Каковы различия между отложенными, обещаниями и будущими в JavaScript?
https://www.quora.com/Whats-the-difference-between-a -promise-и-обратный вызов-в-Javascript
Проблема в том, что в вашей модели у вас несколько ковариаций. plot()
будет запускаться автоматически, только если ваш аргумент data=
имеет ровно три столбца (один из которых является ответом). Например, на странице справки ?plot.svm
вы можете вызвать
data(cats, package = "MASS")
m1 <- svm(Sex~., data = cats)
plot(m1, cats)
. Так как вы можете показывать только два измерения на графике, вам нужно указать, что вы хотите использовать для x
и y
, когда у вас есть несколько вариантов для выбора из
cplus<-cats
cplus$Oth<-rnorm(nrow(cplus))
m2 <- svm(Sex~., data = cplus)
plot(m2, cplus) #error
plot(m2, cplus, Bwt~Hwt) #Ok
plot(m2, cplus, Hwt~Oth) #Ok
. Вот почему вы получаете ошибку «Отсутствующая формула».
Существует еще один улов. plot.svm
будет отображать только непрерывные переменные вдоль осей x
и y
. Данные data.frame с контактными линзами имеют только категориальные переменные. Функция plot.svm
просто не поддерживает это, насколько я могу судить. Вам нужно будет решить, как вы хотите обобщить эту информацию в своей собственной визуализации.