1 (изменено: Rumata, 2012-06-20 09:06:52)

Тема: JScript: Ссылка на глобальный объект работает по-разному в js и wsf

Не так давно столкнулся с интересной фищкой. Видимо это баг. На всякий случай привожу конфигурации, где проблема воспроизводится:

Виста

С:\>ver && echo. && cscript

Microsoft Windows [Version 6.0.6002]

Microsoft (R) Windows Script Host Version 5.7

XP

С:\>ver && echo. && cscript

Microsoft Windows XP [Версия 5.1.2600]

Сервер сценариев Windows (Microsoft R) версия 5.7

Как проверить.

Создайте и запустите скрипт z.js

this['a'] = 
function()
{
};

WScript.Echo(a);

a();

Скрипт запускает, отрабатывает и завершается корректно.

Создайте и запустите второй скрипт z.wsf

<?xml version="1.0" encoding="utf-8" ?>

<package>
<job id="wscmd">
<script language="javascript" src="z.js"></script>
</job>
</package>

Скрипт запускается, выводит сообщение и "падает". Причем сообщение содержит некую техническую информацию и не информативно для простого пользователя.

( 2 * b ) || ! ( 2 * b )

2 (изменено: stir, 2012-06-20 08:27:17)

Re: JScript: Ссылка на глобальный объект работает по-разному в js и wsf

Может из-за кодировки в котором сохранен код или нет?

Любители построили Ковчег, а профессионалы - Титаник.

3 (изменено: Rumata, 2012-06-20 09:07:57)

Re: JScript: Ссылка на глобальный объект работает по-разному в js и wsf

Нет. Не в кодировке дело.

Я немного сократил код вначале. Вызов функции глобального объекта приводит к краху wsf-сценария.

( 2 * b ) || ! ( 2 * b )

4 (изменено: max7, 2012-06-28 00:34:19)

Re: JScript: Ссылка на глобальный объект работает по-разному в js и wsf

Я в шоке! Как???
Сколько использую, до такого не додумался.

И при этом

a.apply(null, [])

работает нормально.

eval("(a())") - тоже падает.

А вот если вместо "a()" написать (с var и без)

b = a;
b();

тоже работает нормально.

Чудеса!

Похоже вся суть в "this['a'] = ".