2017-04-26 67 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'; 
} 
相關問題