繁体   English   中英

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

[英]Easy way to toggle something without global variables

我觉得这很难,因为这是一个非常简单的问题。 我希望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时它都会更改任何元素的背景已经改变了。 我知道这是糟糕的编码实践,什么是更好的解决方案?

只需在与函数相同的范围内创建一个新变量; 无论是cycleBackground还是changeBackground ,无论哪个。 这完全没问题。 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)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM