জাভাস্ক্রিপ্ট প্লাস ফাংশন এক্সপ্রেশন সামনে সাইন ইন


866

আমি তাত্ক্ষণিকভাবে অনুরোধ করা ফাংশন সম্পর্কে তথ্য সন্ধান করছি এবং কোথাও আমি এই স্বরলিপিটিতে হোঁচট খেয়েছি:

+function(){console.log("Something.")}()

কেউ কি আমাকে বুঝিয়ে দিতে পারে +যে ফাংশনের সামনের সাইনটির অর্থ / কী?


17
বেন আলমান এখানে এটি সমস্ত ব্যাখ্যা করেছেন: mths.be/iife
ম্যাথিয়াস ব্যেনেন্স

উত্তর:


1320

এটি পার্সারকে নিম্নলিখিত অংশটিকে +একটি অভিব্যক্তি হিসাবে আচরণ করতে বাধ্য করে forces এটি সাধারণত তত্ক্ষণাত ডাকা হয় এমন ফাংশনগুলির জন্য ব্যবহৃত হয়, যেমন:

+function() { console.log("Foo!"); }();

+সেখানে ছাড়াই , যদি পার্সার এমন কোনও অবস্থানে থাকে যেখানে এটি কোনও বিবৃতি প্রত্যাশা করে (যা কোনও অভিব্যক্তি বা একাধিক অ-প্রকাশের বিবৃতি হতে পারে), শব্দটি কোনও ফাংশন প্রকাশের চেয়ে functionফাংশন ঘোষণার সূচনার মতো দেখায় এবং সুতরাং নিম্নলিখিতটি (উপরের লাইনের শেষে থাকাগুলি) একটি সিনট্যাক্স ত্রুটি হবে (যেমন কোনও নামের অনুপস্থিতি যেমন হবে)। এর সাহায্যে এটি এটিকে একটি ফাংশন এক্সপ্রেশন করে তোলে যার অর্থ নামটি alচ্ছিক এবং যার ফলে ফাংশনটির একটি রেফারেন্স আসে, যা আহ্বান করা যায়, সুতরাং বন্ধনীগুলি বৈধ।()+

+বিকল্পগুলির মধ্যে একটি মাত্র। এছাড়া হতে পারে -, !, ~, বা শুধু অন্য কোন ইউনারী অপারেটর সম্পর্কে। পর্যায়ক্রমে, আপনি প্রথম বন্ধনী ব্যবহার করতে পারেন (এটি আরও সাধারণ, তবে সিনট্যাকটিকভাবে আরও বেশি বা কমও সঠিক নয়):

(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());


159
আমরা কী পারি না যে পেরেন-মোড়ানো একটি উচ্চতর স্বরলিপি? আমি অভিব্যক্তিগুলি পরিবেষ্টনের জন্য পরিবেশন করা পেরেনগুলির সাথে খুব পরিচিত। আপনি যদি ইতিমধ্যে জেএসের এই তীরচিহ্নটি বুঝতে না পারেন তবে এই ক্ষেত্রে এটি কী করছে তা মোটেও পরিষ্কার নয়।
ক্রিস

1
দ্রষ্টব্য: দুটি প্যারেন বিকল্পের মধ্যে jsLint দ্বিতীয়টি পছন্দ করে। আমি মনে করি jsHint কম উদ্ভট
বিটরুট-বিটরুট

43
"প্লাস" স্বরলিপি ব্যবহার করে এমন একটি সাধারণ ব্যবহৃত লাইব্রেরি হ'ল বুটস্ট্র্যাপ (যা এই থ্রেডটি পড়ে শেষ করেছি)।
ভিল

বুটস্ট্র্যাপ এটি করছে, বিটিডব্লিউ
xanderiel

94

@ টিজে ক্রাউডারের উত্তরের অনুদানকারী, +সাধারণত এই এসও উত্তরটি ব্যাখ্যা করার সাথে সাথে একটি মানকে সংখ্যাসূচক ingালাই করতে বাধ্য করতে ব্যবহৃত হয় । এই পরিস্থিতিতে একে 'আনারি প্লাস অপারেটর' (গুগলিংয়ের স্বাচ্ছন্দ্যের জন্য) বলা হয়।

var num = +variant;

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

blah + (+(function(){ var scope; return "4"; })());

3
এটি কীভাবে 37 টি আপগেট পেয়েছিল? (+function() { ... })()নোটেশন (সত্য ছাড়া যে এই প্রশ্নের উত্তর দিতে না) ত্রুটি ছাড়া চালানো না থাকতে পারে।
হোয়াইটকিয়ার্ক

6
@ হোয়াইটউয়ার্ক: ফাংশন + কলের চারপাশে একজোড়া ধনুর্বন্ধনী মিস। সংখ্যা কাস্টিংয়ের ব্যাখ্যার কারণে উদ্বেগগুলি আরও বেশি ছিল।
ফিল এইচ

10
ঠিক আছে আমি নিটপিকিং করছিলাম।
হোয়াইটকার্ক

2
@ ক্রিসটফ আমি এই বন্ধনীগুলি সেখানে রেখে দিতে আগ্রহী। আসলে, আমি অনুপস্থিত থাকলে এগুলি যুক্ত করার জন্য আমি এতদূর যাব। এটি যা চলছে তা এটি আরও স্পষ্ট করে তোলে এবং কোডগুলি ফাঁকা স্থানগুলি সরিয়ে ন্যূনতম করা হলে সমস্যাগুলি প্রতিরোধ করে, যার ফলে 3++function...এটি একই নয়।
বেনজাম

3
যদিও আরও প্রতিবিম্বে, এটি +function...নিজের মধ্যে অপ্রয়োজনীয়। একই ফলস্বরূপ blah + function( ){ ... }( );এমনটি ঘটতে পারে যা মোড়ানো বন্ধনীগুলির প্রয়োজনটিকে উপেক্ষা করবে।
বেনজাম

60

সুতরাং সংক্ষিপ্ত উত্তরটি হ'ল এটি কোনও সিন্ট্যাক্স ত্রুটিটিকে বাধা দেয়, ফাংশনটির ফলাফলকে অন্য কোনও উপায়ে ব্যবহার করে।

আপনি ইঞ্জিনটি নির্দেশও দিতে পারেন যে voidঅপারেটরটি ব্যবহার করে আপনি রিটার্ন মানটিতে আগ্রহী নন :

void function() { console.log("Foo!"); }();

অবশ্যই, পুরো জিনিসটির চারপাশে ব্রেস লাগানোও সেই উদ্দেশ্যে কাজ করে।


45
অকার্যকর বা বন্ধনীগুলি অপরিসীম পছন্দসই। এগুলি ডব্লিউটিএফ-মুক্ত। ব্যবহার + হ'ল চালাকতার ধরণ যা খুব স্মার্ট নয়।
পিটার জিতলেন

2
একটি ভাল পয়েন্ট। মনে হচ্ছে অপারেটরগুলির মধ্যে একটির ব্যবহারটি বর্তমানে শিল্পের মানগুলির বিরুদ্ধে চলে। সম্ভবত "শীতল ছাগল" বিকাশকারীরা এটি বেছে নেবে, অন্যথায় আমি এখনও
শূন্য
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.