轻松切换没有全局变量的东西

时间:2014-05-22 17:11:09

标签: javascript coffeescript

我很难问这个,因为这是一个非常简单的问题。我希望cycleBackground函数在changeBackground("#firstbg", img.src)changeBackground("#secondbg", img.src)

之间交替
    cycleBackground = ()->
        img = new Image()
        img.src = '/assets/'+Math.floor(Math.random()*50)+'.jpg)'
        img.onLoad = ()->
            changeBackground("#firstbg", img.src)

我正打算创建一个名为“selected”的全局var 并使其等于“#firstbg”,如果选择“#firstbg”,则将其更改为“#secondbg”,以便每次调用cycleBackground时,它都会更改尚未更改的元素的背景。我知道这是糟糕的编码实践,什么是更好的解决方案?

2 个答案:

答案 0 :(得分:2)

只需在与函数相同的范围内创建一个新变量; cycleBackgroundchangeBackground,无论哪个。这完全没问题。 CoffeeScript将整个编译文件包装在IIFE中,除非您将它们显式附加到全局对象(例如window.selected = ...),否则不会引入任何全局变量。

selected = 'first'

cycleBackground = ()->
  img = new Image()
  img.src = '/assets/'+Math.floor(Math.random()*50)+'.jpg)'
  img.onLoad = ()->
    selected = (if selected == 'first' then 'second' else 'first')
    changeBackground("##{selected}bg", img.src)

答案 1 :(得分:0)

您可以引入一个变量x来保存您当前正在查看的图像,并执行以下操作:

x = 0; 
img.onLoad = ()->
   x = Math.abs(x-1); # toggle
   changeBackground("#" + ['firstbg','secondbg'][x], img.src);

注意:我不知道x会在哪里生活,因为我对CoffeeScript一无所知。