при включении строгого режима:
"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, время: 17:20. |