তাত্ক্ষণিক ফাংশন অনুরোধ সিনট্যাক্স


110

আসলে একটি জেএসলিন্ট বিকল্প রয়েছে, গুড পার্টসগুলির মধ্যে একটিতে আসলে "তাত্ক্ষণিক আহ্বানের আশেপাশে" পেরেন্স প্রয়োজন "অর্থ এই নির্মাণ

(function () {

  // ...

})();

পরিবর্তে হিসাবে লেখার প্রয়োজন হবে

(function () {

  // ...

}());

আমার প্রশ্নটি এটি - এই দ্বিতীয় রূপটি কেন আরও ভাল হিসাবে বিবেচনা করা যেতে পারে যে কেউ ব্যাখ্যা করতে পারবেন? এটা কি আরও স্থিতিস্থাপক? কম ত্রুটি-প্রবণ? এটির প্রথম ফর্মের চেয়ে কী সুবিধা রয়েছে?


এই প্রশ্নটি জিজ্ঞাসা করার পরে, আমি ফাংশন মান এবং ফাংশনের মানগুলির মধ্যে স্পষ্ট ভিজ্যুয়াল পার্থক্যটির গুরুত্ব বুঝতে পেরেছি। সেই ক্ষেত্রে বিবেচনা করুন যেখানে তাত্ক্ষণিকভাবে অনুরোধের ফলাফলটি একটি কার্যনির্বাহী এক্সপ্রেশনটির ডানদিকে থাকে:

var someVar = (function () {

  // ...

}());

যদিও দূরতম প্রথম বন্ধনী চিহ্নগুলি সিন্টেক্সের অপ্রয়োজনীয় হয়, উদ্বোধনী প্রথম বন্ধনী একটি আপ ফ্রন্ট ইঙ্গিত যে মান নির্ধারিত হচ্ছে দেয় না নিজেই ফাংশন বরং ফাংশনের ফলাফলের প্রার্থনা করা হচ্ছে।

এটি কন্সট্রাক্টর ফাংশনগুলির মূলধন সংক্রান্ত ক্রোকফোর্ডের পরামর্শের অনুরূপ - এটি উত্স কোডটি দেখার জন্য যে কারওর জন্য ভিজ্যুয়াল কিউ হিসাবে পরিবেশন করা।


এই বিষয়টি চিহ্নিত করার জন্য ধন্যবাদ. জেএসলিন্টের সতর্কতা বার্তা "কীভাবে একটি লুপের মধ্যে ফাংশনগুলি তৈরি করার সময় সতর্কতা অবলম্বন করুন" থেকে কীভাবে মুক্তি পাবেন তার উপায় আমি কখনই পাইনি। আমি সাবধান ছিলাম, এবং ফাংশনটি বন্ধ করে দিয়েছিলাম তবে জেএসলিন্ট এখনও অভিযোগ করেছেন। এখন আমি জানি যে এটি ধরে নিয়েছে যে আমি দ্বিতীয় প্যাটার্নটি ব্যবহার করেছি।
viam0Zah


আমি এতদিন এটি "ভুল" করে চলেছি। এবং যখন আমি "এই সমস্ত সময়" বলি আমি 1995 থেকে জাভাস্ক্রিপ্ট লিখছি
ডেভ ল্যান্ড

উত্তর:


73

ডগ্লাস ক্রকফোর্ডের স্টাইলের কনভেনশন গাইড থেকে : ("অনুরোধ করা অবিলম্বে" অনুসন্ধান করুন)

যখন কোনও ফাংশনটি তাত্ক্ষণিকভাবে আহ্বান করতে হবে তখন সম্পূর্ণ অনুরোধের অভিব্যক্তিটি পেরেনগুলিতে আবৃত করা উচিত যাতে এটি স্পষ্ট হয় যে উত্পাদিত মানটি ফাংশনটির ফলস্বরূপ এবং এটি নিজেই ফাংশন নয়।

সুতরাং, মূলত, তিনি মনে করেন এটি ফাংশন মান এবং কার্যকারিতার মানগুলির মধ্যে পার্থক্য আরও স্পষ্ট করে তোলে makes সুতরাং, এটি একটি স্টাইলিস্টিক বিষয়, কোডের মধ্যেই আসলে কোনও পার্থক্য নয়।

আপডেট করা রেফারেন্স, পুরানো পিপিটি আর বিদ্যমান নেই


1
আমি এটা পড়ে খুশি। আমি সবেমাত্র জাভাস্ক্রিপ্ট পড়া শেষ করেছি: গুড পার্টস এবং আমি যা ভাবছিলাম তা হ'ল কোনও ফাংশন বলার ফলাফল নির্ধারণ করা সত্যই খারাপ বাক্য গঠন, কারণ কী ঘটছে তা বোঝার জন্য আপনাকে প্রথম এবং শেষ লাইনটি দেখতে হবে। তিনি বইটিতে মোড়ানো প্যারেনগুলি ব্যবহার করেন না, তবে তিনি কেন তাদের সুপারিশ করেন তা আমি ঠিক দেখতে পাচ্ছি।
স্কিলড্রিক

2
@ অ্যালটকগনিটো, আপনি কি পিপিটি-র জন্য একটি নতুন লিঙ্ক সরবরাহ করতে পারেন?
th1rdey3

1
আমি ওয়েবে সন্ধান করেছি, কিন্তু আমি এখনও সেই
পিপিটির

1
আমি আসল পিপিটি খুঁজে পাইনি, তবে আমি তার জাভাস্ক্রিপ্ট কনভেনশন গাইডে একই পয়েন্টটি খুঁজে পেতে সক্ষম হয়েছি।
সিজিপি

আর্কাইভ.অর্গ আছে?
জন গ্রিন

2

তাত্ক্ষণিক নামে নামহীন কার্যাবলী এটিকে প্যারেন্সে জড়িয়ে দেয় কারণ:

  1. এগুলি ফাংশন এক্সপ্রেশন এবং প্যারেনগুলি ছাড়ার ফলে এটি কোনও ফাংশন ঘোষণার হিসাবে ব্যাখ্যা করা হবে যা একটি সিনট্যাক্স ত্রুটি।

  2. ফাংশন এক্সপ্রেশন শব্দ ফাংশন দিয়ে শুরু করতে পারে না।

  3. কোনও ভেরিয়েবলের জন্য ফাংশন এক্সপ্রেশন নির্ধারণের সময়, ফাংশনটি নিজেই ফিরে আসে না, ফাংশনের রিটার্ন মান ফিরে আসেসুতরাং, প্যারেনরা তাদের ভিতরে কী আছে তা মূল্যায়ন করে একটি মান উত্পাদন করে।যখন ফাংশনটি কার্যকর করা হয় এবং পিছনের প্যারেনগুলি ..}()তত্ক্ষণাত ফাংশনটি সম্পাদন করে।


দাথন, আপনি একটি আলাদা প্রশ্নের উত্তর দিচ্ছেন। আপনি সঠিক যে ঘেরের বন্ধনীগুলি মাঝে মাঝে সিনথেটিকভাবে প্রয়োজনীয় হয় তাই পার্সার ফাংশন ঘোষণার থেকে ফাংশন প্রকাশকে আলাদা করতে পারে। তবে আমার প্রশ্নটি আমন্ত্রণ বন্ধনীর স্থান সম্পর্কে। আপনি তৃতীয় পয়েন্টটি ভুল; সংযুক্তকারী প্রথম বন্ধনী সে ক্ষেত্রে অপ্রয়োজনীয়।
ববি আইখফ

আমি আপনার প্রথম উদাহরণটির উত্তর দিচ্ছিলাম যেখানে অবিলম্বে বলা হয় অজ্ঞাতনামা ফাংশনটি কোনও ভেরিয়েবলের জন্য বরাদ্দ করা হয়নি এবং সুতরাং প্রথম 2 কারণে প্রথম পর্বের কারণে প্রথম পর্বগুলি বন্ধুত্বপূর্ণভাবে প্রয়োজনীয়। তৃতীয় কারণটি আপনি যা বলেছিলেন কেবল তা পুনঃস্থাপন করছিল: "খোলার প্রথম বন্ধনীটি একটি সামনের দিকের ইঙ্গিত দেয় যে নির্ধারিত মানটি ফাংশনটি নয়, বরং ফাংশনটি আহ্বানের ফলস্বরূপ" " তবে আমার ধারণা এটি পরিষ্কার ছিল না।
দথান

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