Выполнение eval в символьном виде

Добрый день. Кто подскажет в чем проблема:

<script>
	eval(string);
</script>

выполняется. Однако

<script>
    а=this["\x65\x76\x61\x6C"];
	a(string);
</script>

не выполняется. В консоли сообщение “undefined has no properties” для строки а=this[“\x65\x76\x61\x6C”];. Хотя по описанию this[“\x65\x76\x61\x6C”] есть функция eval в зашифрованом наборе символов и должна выполняться.

переменная куда записывается значение это кириллическая a, а вызов функции - латинская a.

Даже не спрашивай сколько всего я перепробовал пока это понял. Убедится в разности этих a можно в консоли, скопировав символы из примера и взяв их charCodeAt.

console.log("а", "а".charCodeAt())
console.log("a", "a".charCodeAt())

Я в университетское время имел схожую проблему из-за затесавшийся кириллическй с в программе, написанной латиницей.

Добрый день. Здесь просто код для примера. На самом деле переменная латинская и там и там.

<script>
   b=this["\x65\x76\x61\x6C"];
	b(string);
</script>

Но код в этом виде не выполняется. Хотя пишут, что должен. Например, здесь https://zerocoolpro.biz/forum/threads/trejlery-gde-ix-brat.20130/

Я сделал html файл с таким содержимым:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	<script>
	   b=this["\x65\x76\x61\x6C"];
		b('alert(100500)');
	</script>
</body>
</html>

и виду результат выполнения alert-а (в двух браузерах).

Спасибо за помощь. Я понял. Не работает в таком виде:

	<script type="module">
	   b=this["\x65\x76\x61\x6C"];
		b('alert(100500)');
	</script>

Если убрать type=“module”, то работает. Но мне, к сожалению, нужно type=“module”. Еще раз спасибо.

this обязательно использовать? У меня подозрение что type=module выполняет код в строгом режиме, в котором this верхнего уровня (вне функции) вычисляется в udefined. Так же в строгом режиме объявление переменных без var-подобных конструкция не сработает.

Есть вариант использовать глобальную переменную окна (если точно уверен что код будет выполняться в браузере)

<script type="module">
   var b=window["\x65\x76\x61\x6C"];
   b('alert(100500)');
</script>

Да так работает. Но у меня тут же возникает новая проблема:

<script type="module">
	import * as THREE from '../build/three.module.js';
// и так далее - подключение модулей
   var b=window["\x65\x76\x61\x6C"];
      var string ='var camControls;var clock;clock = new THREE.Clock()';
// и так далее рабочий скрипт в строке	
   b(string);
</script>

И консоль выдает “THREE is not defined”. Но если:

<script type="module">
	import * as THREE from '../build/three.module.js';
           var string ='var camControls;var clock;clock = new THREE.Clock()';	
           eval(string);
</script>

То консоль ошибку не выдает и скрипт работает.