2017-04-26 68 views
0

我有两个功能,其中一个检查是否图像载荷:在JavaScript中,如何将未命名函数的值传递给另一个未命名的函数?

var img = document.createElement('img'); 
img.src = "xxx"; 
img.onload = function() { 
    var dimensionValue = 'loaded'; 
}; 
img.onerror = function() { 
    var dimensionValue = 'failed'; 
} 

随后的功能,当用户点击一个按钮,像这样执行:

var trackClick = function(url) { 
    console.log(dimensionValue); 
}; 

我想登录的在调用trackClick函数时(从a链接)调用dimensionValue的值。但是,尽管第一个函数成功地打印了dimensionValue,但当第二个函数被触发时,它不包含任何值,或者它不能指示dimensionValue不存在。

我也试图放置onload/onerror职权范围内trackClick,但随后将显示一条消息,告知不存在所谓的功能trackClick

所以,我的问题是如何从一个匿名函数传递一个值到JS中的另一个匿名函数?

+2

创建一个可由'trackClick','onload'和'onerror'访问的变量并将该值赋值给该变量。换句话说,变量必须在'trackClick','onload'和'onerror'之外定义。 –

回答

2

您的变量可能无法被其他函数访问,因为它是在另一个函数中定义的。

尝试:

var dimensionValue; 
var img = document.createElement('img'); 
img.src = "xxx"; 
img.onload = function() { 
    dimensionValue = 'loaded'; 
}; 
img.onerror = function() { 
    dimensionValue = 'failed'; 
} 

我想你也可以这样做:

var trackClick = function(url) { 
    var img = document.createElement('img'); 
    img.src = "xxx"; 
    img.onload = function() { 
     console.log('loaded'); 
    }; 
    img.onerror = function() { 
     console.log('failed'); 
    } 
} 

如果这不起作用,请发表您的所有代码的进一步帮助。

+1

这不起作用。通过在这两个函数中重新声明'dimensionValue',您就可以将该变量作为其函数的范围,并且永远不会更改顶级'dimensionValue'。 – larz

0

通过在您的函数之外声明dimensionValue,可以扩大可访问它的范围。假设你的trackClick函数在相同的范围内,它应该有权访问dimensionValue

var dimensionValue 
var img = document.createElement('img'); 
img.src = "xxx"; 
img.onload = function() { 
    dimensionValue = 'loaded'; 
}; 
img.onerror = function() { 
    dimensionValue = 'failed'; 
} 
相关问题