Определение глобальной переменной в функции JavaScript
Можно ли определить глобальную переменную в функции JavaScript?
Я хочу использовать переменную trailimage
, которая объявлена в функции makeObj
, в других функциях.
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<script type="text/javascript">
var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
function makeObj(address) {
**var trailimage = [address, 50, 50];**
document.write('<img id="trailimageid" src="' + trailimage[0] + '" border="0" style=" position: absolute; visibility:visible; left: 0px; top: 0px; width: ' + trailimage[1] + 'px; height: ' + trailimage[2] + 'px">');
obj_selected = 1;
}
function truebody() {
return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
}
function hidetrail() {
var x = document.getElementById("trailimageid").style;
x.visibility = "hidden";
document.onmousemove = "";
}
function followmouse(e) {
var xcoord = offsetfrommouse[0];
var ycoord = offsetfrommouse[1];
var x = document.getElementById("trailimageid").style;
if (typeof e != "undefined") {
xcoord += e.pageX;
ycoord += e.pageY;
}
else if (typeof window.event != "undefined") {
xcoord += truebody().scrollLeft + event.clientX;
ycoord += truebody().scrollTop + event.clientY;
}
var docwidth = 1395;
var docheight = 676;
if (xcoord + trailimage[1] + 3 > docwidth || ycoord + trailimage[2] > docheight) {
x.display = "none";
alert("inja");
}
else
x.display = "";
x.left = xcoord + "px";
x.top = ycoord + "px";
}
if (obj_selected = 1) {
alert("obj_selected = true");
document.onmousemove = followmouse;
if (displayduration > 0)
setTimeout("hidetrail()", displayduration * 1000);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<img alt="" id="house" src="Pictures/sides/right.gif" style="z-index: 1; left: 372px;
top: 219px; position: absolute; height: 138px; width: 120px" onclick="javascript:makeObj('Pictures/sides/sides-not-clicked.gif');" />
</form>
</body>
</html>
5 ответ(ов)
Просто объявите переменную trialImage
вне функций:
var trialImage;
Затем в вашей функции можно присвоить значение:
function makeObj(address) {
trialImage = [address, 50, 50];
...
...
}
Такой подход позволит вам использовать переменную trialImage
как глобальную, и она будет доступна в любом месте скрипта после ее объявления.
Чтобы сделать переменную глобальной, достаточно объявить её за пределами функций и присваивать значения внутри них. Например:
<script type="text/javascript">
var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
var trailimage = null; // Глобальная переменная
function makeObj(address) {
trailimage = [address, 50, 50]; // Присвоение значения
}
</script>
Также можно просто убрать "var" перед названием переменной внутри функции, и она станет глобальной. Однако лучше один раз объявить её снаружи для более чистого кода. Это будет работать:
var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
function makeObj(address) {
trailimage = [address, 50, 50]; // Глобальная переменная, присвоение значения
}
Надеюсь, этот пример прояснит ситуацию: http://jsfiddle.net/qCrGE/
var globalOne = 3;
testOne();
function testOne() {
globalOne += 2;
alert("globalOne is: " + globalOne);
globalOne += 1;
}
alert("outside globalOne is: " + globalOne);
testTwo();
function testTwo() {
globalTwo = 20; // Объявление глобальной переменной
alert("globalTwo is: " + globalTwo);
globalTwo += 5;
}
alert("outside globalTwo is: " + globalTwo);
В этом примере globalOne
объявляется глобально, и его значение изменяется в функции testOne
. globalTwo
становится глобальной переменной в функции testTwo
, так как перед ней не стоит слово var
, let
или const
.
Нет, вы не можете. Просто объявите переменную вне функции. Вам не обязательно объявлять её одновременно с присвоением значения:
var trailimage;
function makeObj(address) {
trailimage = [address, 50, 50];
}
В JavaScript существуют три типа области видимости (scope):
- Глобальная область видимости (Global Scope): переменная доступна в любом месте кода.
- Блочная область видимости (Block Scope): переменная доступна внутри определённой области, такой как функция.
- Локальная область видимости (Local Scope): переменная доступна в более узких рамках, например, внутри условия if.
Если вы добавляете var
перед именем переменной, то область видимости определяется местоположением этой переменной.
Пример:
var num1 = 18; // Глобальная область
function fun() {
var num2 = 20; // Локальная (функциональная) область
if (true) {
var num3 = 22; // Блочная область (внутри условия if)
}
}
В этом случае:
num1 = 18; // Глобальная область
function fun() {
num2 = 20; // Глобальная область
if (true) {
num3 = 22; // Глобальная область
}
}
Во втором примере переменные num2
и num3
становятся глобальными, так как они объявлены без var
, что делает их доступными в любой части кода.
Это очень просто. Определите переменную trailimage
вне функции и задайте ей значение внутри функции makeObj. Теперь вы сможете получить доступ к её значению из любой точки вашего кода.
var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
var trailimage;
function makeObj(address) {
trailimage = [address, 50, 50];
...
}
Таким образом, trailimage
будет доступна и вне функции makeObj
, что позволяет использовать её значение в других частях вашего кода.
Каков объем видимости переменных в JavaScript?
Проверка существования переменной в JavaScript (определена/инициализирована)
В чем разница между call и apply?
Как проверить неопределённую переменную в JavaScript
Как интерполировать переменные в строках JavaScript без конкатенации?