при включении строгого режима:
"use strict";
var global = (function(){return this || window})();
alert(global);
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
devote,
Если windows есть, то да, все нормально, а если нет - ПАДАЕТ. Разговор вообще какой-то беспредметный, трудно придумать случай, когда пишущий скрипт не знает, для браузера от пишет или нет, т.е. есть window или нет. Нет, можно конечно писать какие-то универсальные функции, которые потом используются и там и сям, но в этом случае в глобальные переменные лазить не надо. Никогда не надо, но в этом случае - особенно. Кста, для экспериментов без браузера использую 1. Windows Script Host - движок тот же, что у шестого IE, даже под windows 7, в которую входит 9-й IE, в Windows Script Host движок от шестого. 2. V8 - движок от гугла, тот же, что и в хроме. Можно скачать исходники и собрать. Также можно скачать и собрать движок от мозилы Spider Monkey, но я им не пользовался. |
Цитата:
var global = (function(self){return this || typeof window !== 'undefined' && window || self})(this);
Тут у нас получилось простое решение, если нет объекта this (то есть оно равно null) попытаемся получить window, и если и оно не определено, то тогда просто возвращаем ссылку на текущий контекст. |
В Node.JS глобальный объект имеет имя global, вот решение с учетом этого:
var global = (function(self){
return typeof global !== 'undefined' && global || this || typeof window !== 'undefined' && window || self;
})(this);
|
Цитата:
|
Цитата:
Простой вызов cscript z.js не вызывает проблем. z.js
(function(that)
{
that.a = function()
{
WScript.Echo(1);
};
})(this);
a();
Этот вызов cscript z.wsf приведет к краху скрипта. z.wsf <?xml version="1.0" encoding="utf-8" ?> <package> <job id="crash"> <script language="javascript" src="z.js"></script> </job> </package> Пока это единственное решение проблемы: // вариант 1 a.call(); a.apply(); // вариант 2 b = a; b(); А лучше - отказаться от такого способа объявления функций, или изменить структуру скрипта, чтобы избежать этого. |
| Часовой пояс GMT +3, время: 20:07. |