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)

Владлен 11.04.2013 10:42

Как объявить глобальную переменную из функии?
 
Как объявить глобальную переменную из функии?
Например:
var playerUrl
function playRTrack(playerId, myArray) {
		var rIndex = Math.floor(Math.random()*(arr.length));
		var rElement = arr[rIndex];
		var myPlayer = document.getElementById('player');
		var playerUrl = myUrl + rElement;
		var myDownload = document.getElementById('myDownload');
		myDownload.setAttribute("href", playerUrl);
		myPlayer.setAttribute("src", playerUrl);
		myPlayer.play();
	}

Чтобы значение переменной playerUrl стало глобальным...:help:

devote 11.04.2013 10:47

window.playerUrl = 1

rgl 11.04.2013 11:12

Универсальный способ, работает не только в браузерах, но и там, где windows нет. Не совместим с "use strict" :-(
function f() {
  (function(){return this;})().playerUrl = 1;
}
f();

alert( typeof playerUrl + ": " + playerUrl );


А можно просто присвоить значение не объявляя (т.е. без слова var)

devote 11.04.2013 11:16

Цитата:

Сообщение от rgl
Универсальный способ,

во задвинул... уж поверь если человек не знает как в браузере сделать глобальной, то уж явно не полезет туда где нет объекта window

и что бы не лепить то что ты слепил, можно сделать гораздо проще. И безо всяких функций:
var global = window || this;

global.ololo = 1;

alert(ololo);
"use strict"
var global = window || this;

global.ololo = 1;

alert(ololo);

rgl 11.04.2013 11:22

Кста, таким способом можно доступиться внутри функции до глобальной переменной даже если в функции объявлена одноименная локальная:
var test = "global test";
function f() {
  var test = "local test";
  alert( test );
  alert( (function(){return this;})().test );
  (function(){return this;})().test = "new value"
}
f();

alert( test );

rgl 11.04.2013 11:25

Цитата:

Сообщение от devote (Сообщение 245486)
и что бы не лепить то что ты слепил, можно сделать гораздо проще. И безо всяких функций:

Нельзя внутри функции-метода, внутри функции-конструктора, внутри функции, вызванной call или apply.

devote 11.04.2013 11:26

Цитата:

Сообщение от rgl
Кста, таким...

var global = window || this;

var test = "global test";
function f() {
  var test = "local test";
  alert( test );
  alert( global.test );
  global.test = "new value"
}
f();
 
alert( test );

devote 11.04.2013 11:27

Цитата:

Сообщение от rgl
Нельзя внутри функции-метода.

а кто говорит о том что нужно это совать внутрь функции?
я обычно пишу так:
(function(window) {
    ...
})(window || this);

rgl 11.04.2013 11:37

Цитата:

Сообщение от devote (Сообщение 245493)
var global = window || this;

var test = "global test";
function f() {
  var test = "local test";
  alert( test );
  alert( global.test );
  global.test = "new value"
}
f();
 
alert( test );

:nono: :nono: :nono:
var global = window || this; - абсолютно бессмысленная конструкция, т.к. там где window есть, не нужна, а там где нет - падает. Так что:
var global = (function(){return this;})(); // :yes:

devote 11.04.2013 11:39

Цитата:

Сообщение от rgl
а там где нет - падает.

var global = (function(){return this || window})();


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