नीचे दिए गए मामले में, मैं addEventListener कॉलबैक फ़ंक्शन में testvar का नया मान कैसे उपलब्ध करा सकता हूं? नीचे के मामले में, testvar का मान अपरिभाषित है।

var testvar;
setTimeout(function(){
  var testvar = "testvar value"; 
 }, 3000);

document.querySelector('#anotherButton').addEventListener('click', ()=>{
  console.log('testvar '+testvar);
});
0
lordvcs 4 अप्रैल 2018, 17:29

4 जवाब

सबसे बढ़िया उत्तर

testvar की स्थानीय घोषणा वैश्विक घोषणा को छिपा रही है।

var testvar = "Old value";
setTimeout(function(){
  // Here just reuse the global declaration.
  testvar = "testvar value";  
 }, 3000);

document.querySelector('#anotherButton').addEventListener('click', ()=>{
  console.log('testvar: '+ testvar);
});
<button id="anotherButton">Click me!</button>
3
Ele 4 अप्रैल 2018, 14:32
var testvar = ...

आपने अभी एक नया स्थानीय चर घोषित किया है। यह आपके अन्य चर से पूरी तरह से असंबंधित है, जिसे आपने कभी सेट नहीं किया है।

2
SLaks 4 अप्रैल 2018, 14:30

आपको setTimeout विधि के अंदर var चिह्न को हटाना होगा

var testvar;
setTimeout(function(){
  testvar = "testvar value"; 
 }, 3000);
1
Md Johirul Islam 4 अप्रैल 2018, 14:33

घोषित चर निष्पादन के संदर्भ में विवश हैं जिसमें उन्हें घोषित किया गया है।

var testvar; // default value undefined 

testvar वेरिएबल को फिर से घोषित किया गया है और इसका दायरा अब उस फ़ंक्शन के भीतर है

setTimeout(function(){
var testvar = "testvar value"; // testvar value and its scope is within this set
 }, 3000);

इसलिए सेटटाइमआउट फ़ंक्शन के बाहर, testVar चर मान अपरिभाषित . है

अपेक्षित प्राप्त करने के लिए, var को हटा दें और इसे वैश्विक testVar वैरिएबल को रिटर्न वैल्यू - "testvar value" में बदल दें

1
Naga Sai A 4 अप्रैल 2018, 14:41