2017-04-26 18 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が正常に出力された最初の関数にもかかわらず、2番目の関数がトリガされたときに値が含まれていないか、またはdimensionValueが存在しないことを示すことができません。

は私も onload/ onerror関数内 trackClickを配置しようとしましたが、していると呼ばれる機能がないことを通知し、メッセージが表示さ trackClick

だから、私の質問は、1つの無名の関数から値を渡す方法です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

これは動作しません。これらの2つの関数の中で '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'; 
} 
関連する問題