6

Определение глобальной переменной в функции JavaScript

3

Можно ли определить глобальную переменную в функции 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 &amp;&amp; document.compatMode &amp;&amp; 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 &gt; docwidth || ycoord + trailimage[2] &gt; 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 &gt; 0)
                setTimeout("hidetrail()", displayduration * 1000);
        }
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;form id="form1" runat="server"&gt;
    &lt;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');" /&gt;
    &lt;/form&gt;
&lt;/body&gt;

</html>

5 ответ(ов)

0

Просто объявите переменную trialImage вне функций:

var trialImage;

Затем в вашей функции можно присвоить значение:

function makeObj(address) {
    trialImage = [address, 50, 50];
    ...
    ...
}

Такой подход позволит вам использовать переменную trialImage как глобальную, и она будет доступна в любом месте скрипта после ее объявления.

0

Чтобы сделать переменную глобальной, достаточно объявить её за пределами функций и присваивать значения внутри них. Например:

<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.

0

Нет, вы не можете. Просто объявите переменную вне функции. Вам не обязательно объявлять её одновременно с присвоением значения:

var trailimage;

function makeObj(address) {
  trailimage = [address, 50, 50];
}
0

В 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, что делает их доступными в любой части кода.

0

Это очень просто. Определите переменную trailimage вне функции и задайте ей значение внутри функции makeObj. Теперь вы сможете получить доступ к её значению из любой точки вашего кода.

var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
var trailimage;

function makeObj(address) {
    trailimage = [address, 50, 50];
    ...
}

Таким образом, trailimage будет доступна и вне функции makeObj, что позволяет использовать её значение в других частях вашего кода.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь