(1,eval)
পুরানো এবং সাদামাটা পুরানো মধ্যে পার্থক্যটি eval
হ'ল পূর্বেরটি একটি মান এবং পরেরটি একটি মূল্যবান ue এটি যদি আরও কিছু সনাক্তকারী হয় তবে এটি আরও স্পষ্ট হবে:
var x;
x = 1;
(1, x) = 1;
এটি (1,eval)
এমন একটি অভিব্যক্তি যা ফল দেয় eval
(ঠিক যেমনটি বলুন, (true && eval)
বা (0 ? 0 : eval)
হবে) তবে এটি কোনও রেফারেন্স নয় eval
।
আপনি যত্ন কেন?
ওয়েল, একমা বৈশিষ্ট একটি বিবেচনা করে রেফারেন্স থেকে eval
একটি "সরাসরি Eval কল" হতে, কিন্তু একটি অভিব্যক্তি যে নিছক উৎপাদনেরeval
প্রত্যক্ষ ও পরোক্ষ Eval কল বিশ্বব্যাপী সুযোগ চালানো নিশ্চিত হয় - একটি পরোক্ষ এক পরিণত হয়।
আমি এখনও যে জিনিসগুলি জানি না:
- কোন পরিস্থিতিতে সরাসরি স্পষ্ট কল বিশ্বব্যাপী সুযোগে কার্যকর হয় না ?
- কোন পরিস্থিতিতে
this
বিশ্বব্যাপী সুযোগে কোনও ক্রিয়াকলাপ বিশ্বব্যাপী বস্তুটি উত্পাদন করতে পারে না ?
আরও কিছু তথ্য এখানে আটকানো যেতে পারে ।
সম্পাদনা
স্পষ্টতই, আমার প্রথম প্রশ্নের উত্তর হ'ল "প্রায় সর্বদা"। সরাসরি eval
থেকে, executes বর্তমান সুযোগ। নিম্নলিখিত কোড বিবেচনা করুন:
var x = 'outer';
(function() {
var x = 'inner';
eval('console.log("direct call: " + x)');
(1,eval)('console.log("indirect call: " + x)');
})();
আশ্চর্যজনকভাবে (হি-হেই) নয়, এটি প্রিন্ট করে:
direct call: inner
indirect call: outer
সম্পাদনা
আরও পরীক্ষার পরে, আমি অস্থায়ীভাবে বলতে যাচ্ছি যে this
সেট করা যায় না null
বা undefined
। এটি অন্যান্য মিথ্যা মানগুলিতে (0, '', NaN, মিথ্যা) সেট করা যেতে পারে তবে কেবল খুব ইচ্ছাকৃতভাবে।
আমি বলতে যাচ্ছি যে আপনার উত্সটি একটি হালকা এবং বিপরীতমুখী ক্র্যানিও-মলদ্বার বিপরীতে ভুগছে এবং হাস্কেলের একটি সপ্তাহের প্রোগ্রামিংয়ে কাটাতে বিবেচনা করতে পারে।