2016-06-15 78 views
1

这真让我感到害怕。在JavaScript中使用var关键字在函数外声明变量

我想改变我的图像的源属性,当使用JavaScript关键词单击时。

虽然我看过的一些视频确实帮助我做到了,但使用的方法确实令人困惑。

请你们其中一个人体验民间,请向我解释这一点。

<html> 
    <head> 
     <script> 
      var image_tracker = 'p'; 
      function change() { 
       var image = document.getElementById('pics'); 
       if (image_tracker == 'p') { 
        image.src = 'Tulips.jpg'; 
        image_tracker = 't'; 
       } else { 
        image.src = 'Penguins.jpg'; 
        image_tracker = 'p'; 
       } 
      } 
     </script> 
     <title></title> 
    </head> 
    <body> 
     <h1>JavaScript Tutorial</h1> 
     <img src="Penguins.jpg" alt="pics" id="demo" onclick="change();"> 
    </body> 
</html> 

我的实际困惑是,不可能在函数内部声明跟踪器变量?

我实际上尝试在函数内部声明它,但它不起作用。

请好人们,告诉我什么我不知道。

我的实际困惑是为什么我不能在函数内声明变量跟踪器?

请不要介意代码,我的困惑就是变量声明

+3

首先,你的'function'没有名字。其次,发布一些html来说明你想要的行为,并帮助我们理解它。 –

+0

感谢您的回复。 – pedroyanky

回答

-1

,如果你里面定义它,然后每次运行函数时,“跟踪”将被初始化

1

首先,添加一个函数名称。

至于为什么声明函数内部的变量是不行的,这是因为如果你这样做,你每次调用函数时,变量将被重置为在你的情况下,其原始值,即t。由于您希望此值在多个函数调用中保持不变,因此您需要某种方式将该值存储在某个位置,以便在下次调用该函数时获取上次存储的值。

您可以在没有关键字var的函数中定义变量。这将使其成为全球性的。我不确定这是否是解决您问题的最佳方法,但这是可行的。

function change() { 
    tracker = 't'; 
    var image = document.getElementById('img'); 

    if (tracker == 't') { 
    image.src = 'photo.jpg'; 
    tracker = 'f'; 
    } else { 
    image.src = 'picture.jpg'; 
    tracker = 't'; 
    } 
} 

如果你想避免tracker为全局变量,另一种方法可能是值保存在你的img标签本身data属性。因此,每次运行函数时,首先获取属性值,相应地执行代码,然后将新的更新值保存到属性中。

<img data-tracker="t" src="Penguins.jpg" alt="pics" id="demo" onclick="change();"> 

function change() { 
    var image = document.getElementById('img'); 
    var tracker = image.getAttribute("data-tracker"); 

    if (tracker == 't') { 
    image.src = 'photo.jpg'; 
    // tracker = 'f'; 
    image.setAttribute("data-tracker", "f"); 
    } else { 
    image.src = 'picture.jpg'; 
    // tracker = 't'; 
    image.setAttribute("data-tracker", "t"); 
    } 
} 
+1

尽管没有使用'var'是一个不好的习惯,它并没有回答“为什么声明里面不行”... –

+1

谢谢@ ADreNaLiNe-DJ。编辑我的答案包括这一点。 –

+0

如果你想避免把'tracker'作为一个全局变量,另一种方法可能是将'data'属性保存为'img'标签本身。因此,每次运行函数时,首先获取属性值,相应地执行代码,然后将新的更新值保存到属性中。这怎么可能 – pedroyanky

3

您声明了函数外的变量来保留它的下一个函数调用的值。

如果你声明它里面的功能比它的价值将在未来的函数调用进行复位:

var trigger1 = 'f'; 
 

 
function testTrigger() { 
 
    var trigger2 = 'f'; 
 
    console.log('Trigger 1: ' + trigger1 + ' | Trigger 2: ' + trigger2); 
 
    
 
    if (trigger1 == 't') { 
 
    trigger1 = 'f'; 
 
    trigger2 = 'f'; 
 
    } else { 
 
    trigger1 = 't'; 
 
    trigger2 = 't'; 
 
    } 
 
} 
 

 
testTrigger(); 
 
testTrigger(); 
 
testTrigger(); 
 
testTrigger();
所有的

相关问题