কোনও ফাংশনের অভ্যন্তরে আমি কীভাবে বৈশ্বিক চলকের মান পরিবর্তন করব


131

আমি জাভাস্ক্রিপ্ট ব্যবহার করছি এবং আমি একটি গ্লোবাল ভেরিয়েবল তৈরি করি। আমি এটি একটি ফাংশনের বাইরে সংজ্ঞায়িত করেছি এবং আমি কোনও ফাংশনের অভ্যন্তর থেকে বৈশ্বিক পরিবর্তনশীল মানটি পরিবর্তন করতে এবং অন্য ফাংশন থেকে এটি ব্যবহার করতে চাই, আমি কীভাবে এটি করব?

উত্তর:


148

কেবল ফাংশনের অভ্যন্তরে পরিবর্তনশীল উল্লেখ করুন; কোন যাদু নেই, কেবল এটির নামটি ব্যবহার করুন। যদি এটি বিশ্বব্যাপী তৈরি করা হয়, তবে আপনি বিশ্বব্যাপী পরিবর্তনশীল আপডেট করবেন।

আপনি স্থানীয়ভাবে এটি ব্যবহার করে ঘোষণা করে এই আচরণটিকে ওভাররাইড করতে পারেন var, তবে আপনি যদি এটি ব্যবহার না করেন varতবে কোনও ফাংশনে ব্যবহৃত ভেরিয়েবলের নামটি যদি বিশ্বব্যাপী ঘোষিত হয় তবে এটি কার্যকর হবে be

এজন্য সর্বদা আপনার ভেরিয়েবলগুলি স্পষ্টভাবে ঘোষণা করার জন্য এটি সর্বোত্তম অনুশীলন হিসাবে বিবেচিত হয় var। কারণ আপনি যদি এটি ভুলে যান তবে আপনি বিশ্বব্যাপী দুর্ঘটনাক্রমে জঞ্জাল শুরু করতে পারেন। এটি করা সহজ ভুল। তবে আপনার ক্ষেত্রে, এটি ঘুরে দাঁড়ায় এবং আপনার প্রশ্নের সহজ উত্তর হয়ে যায়।


3
এটি আমার পক্ষে কাজ করে না: দেশ = 'foo' aj .জ্যাক্স ({url: '/ কিছু-শেষ পয়েন্ট', সাফল্য: ফাংশন (ডেটা) {দেশ = ডেটা কন্ট্রি;}}); কনসোল.লগ (দেশ) // আউটপুট 'ফু'
মার্ক সিম্পসন

41
@ মার্কসিম্পসন - এটি কাজ করে না তার কারণ এটি আপনার উদাহরণে, console.logতাত্ক্ষণিকভাবে চালানো হয় তবে এজ্যাক্স সাফল্য ফাংশনটি কেবল তখনই সঞ্চালিত হয় যখন এজ্যাক্স কল আসলে প্রতিক্রিয়া দেখায়। এটি এজাক্সের অ্যাসিনক্রোনাস প্রকৃতি সম্পর্কে একটি মৌলিক বিষয়: ক্লোজার ফাংশনগুলিতে কোডটি তার চারপাশের কোডের সাথে ধারাবাহিকভাবে চলবে না। ইভেন্ট-চালিত কোড সম্পর্কে শেখার সময় এটি উপলব্ধি করা একটি গুরুত্বপূর্ণ।
স্পডলি

এই ক্ষেত্রে কনসোল.লগটি আরও সঠিক হওয়ার উপায়টি এটি এজাক্স সাফল্যের ফাংশনের ভিতরে রাখা।
DWils

আমার আরও একটি উজ্জ্বল অন্তর্দৃষ্টি: ভেরিয়েবল নামের বানান এবং কেস দুটিবার পরীক্ষা করুন check সেশনআইড বনাম সেশনআইডি-র মতো সাধারণ কিছু মিস করা খুব সহজ।
হোয়াইটবার্ড

আমি এই একই সমস্যা আছে। তবে শেষ পর্যন্ত বুঝতে পেরেছি, ধন্যবাদ @ স্পডলে!
যুধিষ্ঠির বায়ু

63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

alert("Value of 'a' outside the function " + a); //outputs 20

1
দুর্দান্ত এই দুর্দান্ত উদাহরণের জন্য ধন্যবাদ। এর যুক্তিটি আমার মাথাটি করছিল Just 4 ডি ভাবনাতে অভ্যস্ত হয়ে উঠল।
মাইকি 3 স্ট্রিংস

29

কেবল সেই পরিবর্তনশীলটির নাম ব্যবহার করুন।

জাভাস্ক্রিপ্টে, ভেরিয়েবলগুলি কেবল কোনও ফাংশনে স্থানীয় হয়, যদি সেগুলি ফাংশনের প্যারামিটার হয় তবে আপনি যদি varভেরিয়েবলের নামের আগে কীওয়ার্ড টাইপ করে তাদের স্পষ্টত স্থানীয় হিসাবে ঘোষণা করেন ।

স্থানীয় মানের নামের যদি বৈশ্বিক মানের মতো একই নাম থাকে তবে windowঅবজেক্টটি ব্যবহার করুন

এই jsfiddle দেখুন

x = 1;
y = 2;
z = 3;

function a(y) {
  // y is local to the function, because it is a function parameter
  console.log('local y: should be 10:', y); // local y through function parameter
  y = 3; // will only overwrite local y, not 'global' y
  console.log('local y: should be 3:', y); // local y
  // global value could be accessed by referencing through window object
  console.log('global y: should be 2:', window.y) // global y, different from local y ()

  var x; // makes x a local variable
  x = 4; // only overwrites local x
  console.log('local x: should be 4:', x); // local x
  
  z = 5; // overwrites global z, because there is no local z
  console.log('local z: should be 5:', z); // local z, same as global
  console.log('global z: should be 5 5:', window.z, z) // global z, same as z, because z is not local
}
a(10);
console.log('global x: should be 1:', x); // global x
console.log('global y: should be 2:', y); // global y
console.log('global z: should be 5:', z); // global z, overwritten in function a

সম্পাদন করা

ES2015 এর সাথে আরও দুটি কীওয়ার্ড এসেছে constএবং letএটি ভেরিয়েবলের স্কোপকেও প্রভাবিত করে ( ভাষা নির্দিষ্টকরণ )


1
গ্লোবাল এবং স্থানীয়ভাবে ঘোষিত ভেরিয়েবলের মধ্যে নামের সংঘাতের বর্ণনা দেওয়ার জন্য এবং এটি কীভাবে অ্যাক্সেস করবেন তা +1
gdbj

6
<script>
var x = 2; //X is global and value is 2.

function myFunction()
{
 x = 7; //x is local variable and value is 7.

}

myFunction();

alert(x); //x is gobal variable and the value is 7
</script>

কেবলমাত্র varফাংশনের ভিতরে থাকা কীওয়ার্ডটি ব্যবহার করবেন না , তারপরে আপনাকে কোনও সমস্যা করতে হবে নাdocument.getElementById("outside").value = x;
বেন অউবিন

5
var a = 10;

myFunction(a);

function myFunction(a){
   window['a'] = 20; // or window.a
}

alert("Value of 'a' outside the function " + a); //outputs 20

সঙ্গে জানালা [ 'variableName'] বা window.variableName আপনি একটি ফাংশন ভিতরে একটি বিশ্বব্যাপী ভেরিয়েবলের মান পরিবর্তন করতে পারেন।


এই একমাত্র উপায় আমি কৌণিক উপাদান বৈশ্বিক পরিবর্তনশীল মান পরিবর্তন করতে পারে !!!
পদ্মরাজ ভট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.