Size: a a a

JavaScript — русскоговорящее сообщество

2020 August 28

t

th.witness in JavaScript — русскоговорящее сообщество
va1
А чем плох вопрос? Затрагивает же тему хойстинга, которую просто не могут не спросить, так как любой список вопросов в интернетах начинается с неё )
Всплытия не существует, расходимся.
источник

t

th.witness in JavaScript — русскоговорящее сообщество
Существует простое и понятное лексическое окружение.
источник

t

th.witness in JavaScript — русскоговорящее сообщество
Пока.
источник

KS

Konstantin Sedykh in JavaScript — русскоговорящее сообщество
Sergey 🛸
Хороший код это как минимум читаемый код. Если обращение к переменным раньше чем объявление, то это уже не хороший код
в нашем мире феи не блюют радугой и поэтому ты должен уметь читать и быстро разбираться с ЛЮБЫМ кодом, а не только с идеально написанном с твоей точки зрения.
источник

I

ILLEGAL in JavaScript — русскоговорящее сообщество
Добрейший вечерочек друзья!

Нужно сделать простенькую js песочницу, просто выполнять код и выводить результат. Делаю так:

const document = iframe.contentDocument
document.open()
document.write('
<html>
<head>...</head>
<body>...<script>${js}</script></body>
</html>
')
document.close()

всё круто, всё работает, но есть одна проблема. При выполнении одного и того же кода получаю ошибку типа Identifier 'Jopa' has already been declared

как мне решить это? Каждый раз полностью удалять айфрейм и создавать новый? Как-то не очень...
источник

KS

Konstantin Sedykh in JavaScript — русскоговорящее сообщество
скажу больше, при простом удалении фрейма - скрипт нифига не удалится из контекста. надо очищать именно src
источник

KS

Konstantin Sedykh in JavaScript — русскоговорящее сообщество
а так, как вариант можно eval или new Function заюзать. второе предпочтительнее.
источник

A

AntiPlayer in JavaScript — русскоговорящее сообщество
Konstantin Sedykh
скажу больше, при простом удалении фрейма - скрипт нифига не удалится из контекста. надо очищать именно src
А сделать фрейму reload не поможет?
источник

I

ILLEGAL in JavaScript — русскоговорящее сообщество
AntiPlayer
А сделать фрейму reload не поможет?
звучит как идеальный вариант, сейчас попробую
Если нет, то через Function буду вставлять
источник

I

ILLEGAL in JavaScript — русскоговорящее сообщество
та походу не, результат такой же
источник

I

ILLEGAL in JavaScript — русскоговорящее сообщество
нашел супер кроссбраузерный вариант с blob
источник

VD

Vitalii D in JavaScript — русскоговорящее сообщество
ILLEGAL
Добрейший вечерочек друзья!

Нужно сделать простенькую js песочницу, просто выполнять код и выводить результат. Делаю так:

const document = iframe.contentDocument
document.open()
document.write('
<html>
<head>...</head>
<body>...<script>${js}</script></body>
</html>
')
document.close()

всё круто, всё работает, но есть одна проблема. При выполнении одного и того же кода получаю ошибку типа Identifier 'Jopa' has already been declared

как мне решить это? Каждый раз полностью удалять айфрейм и создавать новый? Как-то не очень...
каждый раз удалять iframe как раз таки нормальный вариант, если хотите 100% изолированную песочницу
источник

I

ILLEGAL in JavaScript — русскоговорящее сообщество
Vitalii D
каждый раз удалять iframe как раз таки нормальный вариант, если хотите 100% изолированную песочницу
В этом есть смысл, заставляет задуматься
источник

S🛸

Sergey 🛸 in JavaScript — русскоговорящее сообщество
Vitalii D
каждый раз удалять iframe как раз таки нормальный вариант, если хотите 100% изолированную песочницу
Зачем? Достаточно сменить url
источник

VD

Vitalii D in JavaScript — русскоговорящее сообщество
зачем? достаточно создать новый
источник

S🛸

Sergey 🛸 in JavaScript — русскоговорящее сообщество
Затем что больше кода и изменением Dom
источник

VD

Vitalii D in JavaScript — русскоговорящее сообщество
сомневаюсь что больше и понятнее, ну дело то ваше, пробуйте
источник

M

Moi in JavaScript — русскоговорящее сообщество
var a=2

function foo(){
 alert (a);
}

(function p(){
 var a=1
 foo()
})()
//Добрый день, кто нибудь может объяснить почему будет выведено 2?
источник

S🛸

Sergey 🛸 in JavaScript — русскоговорящее сообщество
Moi
var a=2

function foo(){
 alert (a);
}

(function p(){
 var a=1
 foo()
})()
//Добрый день, кто нибудь может объяснить почему будет выведено 2?
Потому что foo ничего не знает про внутренний var a
источник

А

Александр in JavaScript — русскоговорящее сообщество
Moi
var a=2

function foo(){
 alert (a);
}

(function p(){
 var a=1
 foo()
})()
//Добрый день, кто нибудь может объяснить почему будет выведено 2?
Потому что замыкание работает со внешним лексическим окружением функции, а это контекст объявления, а не контекст вызова.
источник