Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как объявить глобальную переменную из функии? (https://javascript.ru/forum/events/37199-kak-obyavit-globalnuyu-peremennuyu-iz-funkii.html)

rgl 11.04.2013 18:30

with-love-from-siberia,
Падает совсем не потому, а из-за использования WScript.Echo там где не надо. Вот так все нормально, хоть запускай через js, хоть через wsf
(function(that)
{
	that.a = 1;
})(this);

WScript.Echo( a );

rgl 11.04.2013 18:36

WScript - не JavaScript'овый объект, а WScript.Echo - не функция. Попробуйте, напр.
WScript.Echo( typeof WScript.Echo );
а
WScript.Echo( typeof WScript );
или
WScript.Echo( WScript.Echo instanceof Function );
вообще падают, чего (с точки зрения JavaScript) происходить не должно.

rgl 11.04.2013 19:02

Цитата:

Сообщение от rgl
var global = (function(){return this;})();

Кста, никто не мешает использовать и в стрикт моде:
var global=(function(){return this;})();
"use strict";
// и дальше все стрикт

Владлен 11.04.2013 19:38

Блин, что ж такое.
function test() {
window.a = 1
alert(a)
}
alert(a)

внутри функции выводит а снаружи нет.(

with-love-from-siberia 11.04.2013 20:36

Цитата:

Сообщение от rgl
WScript - не JavaScript'овый объект, а WScript.Echo - не функция. Попробуйте, напр.

Я в курсе. Но дело не в этом. WScript.Echo всего лишь для иллюстрации. Попробуйте без нее. Например, так:
(function(that)
{
	that.a = function()
	{
	};
})(this);

a();


Понятно, что это искусственный пример, но он иллюстрирует проблему.

rgl 12.04.2013 12:13

with-love-from-siberia,
Ваша правда. Кста, так работает:
(function(that)
{
	that.a = function()
	{
		WScript.Echo( "It works!" );
	};
})(this);

a.call();

skillful 05.08.2016 19:38

Здравствуйте. Понимаю - тема устарела, но все же. У меня похожий код. Нужно переменную socket сделать глобальной. Прошу помощи...
"use strict";

(function()
{
	// ======== global vars from config ========   
	var srvaddress = url_base + 'include/socket/';//url каталога
	var startserveraddress = srvaddress+'wsstart.php';
	var chataddr = 'ws://localhost:8889';


	// ======== private vars ========
	var socket;
	var xhttp;

	////////////////////////////////////////////////////////////////////////////
	var init = function()
	{
		//https://learn.javascript.ru/websockets Docs
		socket = new WebSocket(chataddr + '/' + cookies + '/516616546465464');

		socket.onopen = connectionOpen; //Соединение установлено
		socket.onmessage = messageReceived; //Получены данные
		//socket.onerror = errorOccurred; 
		//socket.onopen = connectionClosed;

		document.getElementById("msg-send").onclick = function()
		{
			//sendMessage();
			messagesend();
		};

	};

	function messagesend()
	{
	}

	function connectionOpen()
	{
		socket.send("{\"act\":\"start\", \"msg\":\"Connection with "+chataddr+". Подключение установлено обоюдно, отлично!\"}");
	}

	function messageReceived(e)
	{
		var json = eval("(" + e.data + ")");

	}

	function connectionClose() {
		socket.close();
	}

	return{
		// ---- onload event ----
		load : function () {
			window.addEventListener('load', function () {
				init();
			}, false);
		}
	}
})().load();

warren buffet 05.08.2016 21:19

Ну так сотри var перед ней и она вылезет за пределы функции. Если там еще есть функция снаружи, то напиши явно window.socket= и далее по тексту. Ты же читал тему сначала или забил?


Часовой пояс GMT +3, время: 12:25.