Javascript 尝试使用另一个函数中的变量

Javascript 尝试使用另一个函数中的变量,javascript,Javascript,来自C#,我在使用另一个函数的变量时遇到一些问题: // Define colors albumart.addEventListener('load', function () { var vibrant = new Vibrant(albumart); var swatches = vibrant.swatches() for (var swatch in swatches) if (swatches.hasOwnProperty(swatch) &am

来自C#,我在使用另一个函数的变量时遇到一些问题:

// Define colors
albumart.addEventListener('load', function () {
    var vibrant = new Vibrant(albumart);
    var swatches = vibrant.swatches()
    for (var swatch in swatches)
        if (swatches.hasOwnProperty(swatch) && swatches[swatch]) {
            var darkvibrant = swatches.DarkVibrant;
        }
})

// Toggle styles
function mainUpdate(type) {
    if (type == "music") {
        isplaying ? albumart.src = "/var/mobile/Documents/Artwork.jpg?" + milli : albumart.src = "images/No-album-art.png";
        isplaying ? icons.style.color = darkvibrant : icons.style.color = "#202727";
    }
}
albumart.addEventListener('load', function () {
var vibrant = new Vibrant(albumart);
var swatches = vibrant.swatches()
for (var swatch in swatches)
    if (swatches.hasOwnProperty(swatch) && swatches[swatch]) {
        window.darkvibrant = swatches.DarkVibrant;
    }
});
我试图在第二个函数中使用
darkvibrant
,我尝试了以下方法:

var darkvibrant = {};

darkvibrant.color = swatches.DarkVibrant;

isplaying ? icons.style.color = darkvibrant : icons.style.color = "#202727";

非常感谢您的帮助。

您需要将变量设置为全局变量。因此,在第一个函数外部声明
darkvibrant
变量,使其成为全局变量,然后在第一个函数中初始化

var darkvibrant; // make it global
albumart.addEventListener('load', function () {
var vibrant = new Vibrant(albumart);
var swatches = vibrant.swatches()
for (var swatch in swatches)
    if (swatches.hasOwnProperty(swatch) && swatches[swatch]) {
        darkvibrant = swatches.DarkVibrant;
    }
});
现在可以在第二个函数中使用

var darkvibrant; // make it global
albumart.addEventListener('load', function () {
var vibrant = new Vibrant(albumart);
var swatches = vibrant.swatches()
for (var swatch in swatches)
    if (swatches.hasOwnProperty(swatch) && swatches[swatch]) {
        darkvibrant = swatches.DarkVibrant;
    }
});
另一种方法是,您可以在
窗口
对象上指定属性,如
window.darkvibrant
,并在第二个函数中使用相同的语法:

// Define colors
albumart.addEventListener('load', function () {
    var vibrant = new Vibrant(albumart);
    var swatches = vibrant.swatches()
    for (var swatch in swatches)
        if (swatches.hasOwnProperty(swatch) && swatches[swatch]) {
            var darkvibrant = swatches.DarkVibrant;
        }
})

// Toggle styles
function mainUpdate(type) {
    if (type == "music") {
        isplaying ? albumart.src = "/var/mobile/Documents/Artwork.jpg?" + milli : albumart.src = "images/No-album-art.png";
        isplaying ? icons.style.color = darkvibrant : icons.style.color = "#202727";
    }
}
albumart.addEventListener('load', function () {
var vibrant = new Vibrant(albumart);
var swatches = vibrant.swatches()
for (var swatch in swatches)
    if (swatches.hasOwnProperty(swatch) && swatches[swatch]) {
        window.darkvibrant = swatches.DarkVibrant;
    }
});

我的猜测是darkvibrant不在范围内。您可以使darkvibrant成为全局的,但还有其他方法(例如闭包)。我试着这样使用它,但它不起作用。你的代码很好。应该还有其他问题,你无法访问变量的值。