জাভাস্ক্রিপ্ট লাইব্রেরিতে শীর্ষস্থানীয় সেমিকোলন কী করে?


156

বেশ কয়েকটি জাভাস্ক্রিপ্ট লাইব্রেরিতে আমি এই সূচনাটি খুব প্রথম দিকে দেখেছি:

/**
 * Library XYZ
 */
;(function () {
  // ... and so on

যদিও আমি "অবিলম্বে সম্পাদিত ফাংশন" সিনট্যাক্সের সাথে পুরোপুরি আরামদায়ক

(function(){...})()

আমি ভাবছিলাম যে শীর্ষস্থানীয় সেমিকোলনটি কীসের জন্য। আমি যে বিষয়টি নিয়ে আসতে পারি তা হ'ল এটি একটি বীমা। এটি হ'ল, যদি গ্রন্থাগারটি অন্য, বগী কোডটিতে এম্বেড থাকে তবে এটি "সর্বশেষ বিবৃতিটি এখানে সর্বশেষে শেষ হয়" ধরণের স্পিড বাম্প হিসাবে কাজ করে।

এটি অন্য কোনও কার্যকারিতা পেয়েছে?


উত্তর:


140

এটি আপনাকে একাধিক জাভাস্ক্রিপ্ট ফাইলগুলিকে নিরাপদে একরকম করে তুলতে, এটি একটি এইচটিটিপি অনুরোধ হিসাবে দ্রুত পরিবেশন করার অনুমতি দেয়।


16
তবে এটি প্রয়োজনীয় হবে না, যদি সমস্ত ফাইল সঠিকভাবে কোড আপ হয়ে যায়, তাই না?
বোল্ডউইন

8
নং: আপনার উদাহরণে, আপনি পেতে চাই (function(){...})()(function(){...})()
অ্যারন ডিজুল্লা

8
আমি 'সঠিকভাবে কোডড' দিয়ে বোঝাতে
চাইছিলাম

6
হ্যাঁ বোল্ডউইন, তবে এটি কেবল তেমনটি নয়।
ম্যাথিয়াস বাইনেস

13
দুটি ত্রুটিযুক্ত কোডেড ফাইল কেবল তৃতীয় ফাইলটিতে এই নোংরা ফিক্স রয়েছে এমনটি ফিট করে না। কনটেটেনেটর ফলস্বরূপ ফাইলগুলির মধ্যে অতিরিক্ত অর্ধেকজন যোগ করতে পারে না কেন?
ডেভিড হরভ্থ

30

সর্বোত্তম উত্তরটি আসলে প্রশ্নটিতে দেওয়া হয়েছিল, সুতরাং আমি কেবল এখানে এটি স্পষ্টতার জন্য লিখব:

;তাত্ক্ষণিকভাবে অনুরোধ করা ফাংশন এক্সপ্রেশনগুলির সামনে নেতৃত্ব রয়েছে ত্রুটিগুলি রোধ করার জন্য যখন একটি এক্সপ্রেশনযুক্ত কোনও ফাইলের সাথে কনটেন্টেশন করার সময় ফাইলটি যুক্ত করা হয় তখন এটি সঠিকভাবে বন্ধ হয় না ;

সেরা অনুশীলনটি হ'ল সেমিকোলনগুলির সাহায্যে আপনার অভিব্যক্তিগুলি সমাপ্ত করা, তবে নেতৃস্থানীয় সেমিকোলনকে একটি সুরক্ষার হিসাবে ব্যবহার করুন।


আপনি যদি প্রতিরক্ষামূলক সেমিকোলন ব্যবহার করেন তবে কেন সেমিকোলনগুলির সাথে আপনার প্রকাশগুলি বন্ধ করবেন? হয় আপনি প্রতিটি লাইনের শেষে সেমিকোলনগুলির উপর নির্ভর করার সুযোগ নিন বা আপনি ডিফেন্সিভ সেমিকোলন ব্যবহার করেন। দু'টি করাই মানুষকে ভুলভাবে সিদ্ধান্তে পৌঁছে দেয় যে দুটি করার একটি কারণ আছে। ডিফেন্সিভ সেমিকোলন ব্যবহারের পরামর্শটি ভাল; পরামর্শ এছাড়াও প্রতিটি উদাহরণের প্রতিস্থাপন "\n"সঙ্গে ";\n"কোন মানে নেই।
ভ্লাদিমির কর্নিয়া

4
@ ভ্লাদিমিরকর্নিয়া: কারণ আপনি সবসময় কেবল নিজের লাইব্রেরিই ব্যবহার করেন না :)
jvenema

@ জাভেনিমা আমি জানি না কেন আপনি ভাবেন যে এটি একটি পার্থক্য করে।
ভ্লাদিমির কর্নিয়া

6
কারণ আপনি আপনার সম্মেলনগুলি অনুসরণ করে অন্য কারও কোডের উপর নির্ভর করতে পারবেন না। ডিফেন্সিভালি কোড করুন এবং তারপরে আপনার দরকার নেই।
jvenema

1
@ ভ্লাদিমিরকর্নিয়া আপনি এটিকে প্রতিরক্ষামূলক হিসাবেও ভাবতে পারেন, আপনি যদি চান - এটি অন্য যে কোনও কোডের বিরুদ্ধে প্রতিরক্ষা করে যা সর্বদা প্রতিরক্ষামূলক সেমিকোলন দিয়ে শুরু হয় না।
নাথান হিঙ্কে

26

সাধারণভাবে, যদি কোনও বিবৃতি (, [, /, +, বা - দিয়ে শুরু হয়) তবে সম্ভাবনা রয়েছে যে এর আগে এই বিবৃতিটির ধারাবাহিকতা হিসাবে ব্যাখ্যা করা যেতে পারে। /, +, এবং - দিয়ে শুরু হওয়া বিবৃতিগুলি বাস্তবে বিরল , তবে বিবৃতিগুলি দিয়ে শুরু হয় (এবং [কমপক্ষে জাভাস্ক্রিপ্ট প্রোগ্রামিংয়ের কয়েকটি স্টাইলে অস্বাভাবিক নয় Some কিছু প্রোগ্রামার এই জাতীয় কোনও বিবৃতি শুরুর দিকে একটি প্রতিরক্ষামূলক অর্ধপরিচয় রাখতে পছন্দ করেন যাতে বিবৃতি এমনকি সঠিকভাবে কাজ চালিয়ে যেতে পারে এটি সংশোধন করার আগে এবং একটি পূর্বে সমাপ্তি সেমিকোলন সরানোর আগে:

var x = 0 // Semicolon omitted here
;[x,x+1,x+2].forEach(console.log) // Defensive ; keeps this statement separate

উৎস:

জাভাস্ক্রিপ্ট: সংজ্ঞা গাইড, 6th ষ্ঠ সংস্করণ


9

এটি একটি শীর্ষস্থানীয় সেমিকোলন হিসাবে উল্লেখ করা হয়।

এর মূল উদ্দেশ্যটি পূর্ববর্তী কোড থেকে নিজেকে রক্ষা করা যা অন্যায়ভাবে বন্ধ ছিল, যা সমস্যা তৈরি করতে পারে। একটি সেমিকোলন এটি হতে আটকাবে। পূর্ববর্তী কোডটি যদি ভুলভাবে বন্ধ হয়ে যায় তবে আমাদের সেমিকোলন এটি সংশোধন করবে। যদি এটি সঠিকভাবে বন্ধ করা থাকে তবে আমাদের সেমিকোলনটি নিরীহ হবে এবং কোনও পার্শ্ব প্রতিক্রিয়া হবে না be


7

এক-লাইন উত্তর হ'ল একাধিক জাভাস্ক্রিপ্ট ফাইল নিরাপদে যুক্ত করে তোলা। সেমিকোলন ব্যবহার করা কোনও সমস্যা উত্থাপন করে না।

ধরুন আপনার একাধিক ফাংশন রয়েছে:

IIFE 1

(function(){
  // The rest of the code
})(); // Note it is an IIFE

IIFE 2

(function(){
   // The rest of the code
})(); // Note it is also an IIFE

সংমিশ্রণে এটি দেখতে দেখতে দেখতে এটির মতো হতে পারে:

(function(){})()(function(){})()

তবে আপনি যদি ফাংশনটির আগে একটি সেমিকোলন যুক্ত করেন তবে এটি দেখতে দেখতে এমনটি দেখাবে:

;(function(){})();(function(){})()

সুতরাং একটি যুক্ত করে ;, কোনও অভিব্যক্তি সঠিকভাবে বন্ধ না করা থাকলে এটি যত্ন নেয়।

উদাহরণ 2

ধরে নিন আপনার একটি ভেরিয়েবল সহ একটি জাভাস্ক্রিপ্ট ফাইল রয়েছে:

var someVar = "myVar"

কিছু ফাংশন সহ আরও একটি জাভাস্ক্রিপ্ট ফাইল:

(function(){})()

এখন কনকনেটেশনের মতো দেখাবে

var someVar = "myVar"(function(){})() // It may give rise to an error

একটি আধা-কোলন সহ, এটি দেখতে পাবেন:

var someVar = "myVar";(function(){})()

4

আপনি জাভাস্ক্রিপ্ট কোডটি মিনিমাইটি করলে এটি ভাল good এটি অপ্রত্যাশিত বাক্য গঠন ত্রুটিগুলি প্রতিরোধ করে।


কিসের মত? নিম্নলিখিত কোডের জন্য সেমিকোলনের কোনও তাত্পর্য রয়েছে বা এটি কেবলমাত্র অনুমান বগি কোডের জন্য প্রকৃত গ্রন্থাগারের সামনে একীভূত হয়েছে?
বোল্ডউইন

কেবলমাত্র সেই কোডগুলিই এর কোনও বিশেষ অর্থ নয়, তবে যখন কোডটি অন্যের কোডের মাঝামাঝি থাকে এবং আপনি যখন এটি একক লাইনে সংশোধন করেন তখন অপ্রত্যাশিত ত্রুটি হতে পারে যেমন (1) সেমিকোলনটি আগের লাইনে অনুপস্থিত, (1) ) পূর্ববর্তীটিও ফাংশন তাই এটি () () () () () হবে, যখন ত্রুটি পাওয়া যায়, ডিবাগ করা শক্ত হয়, আমরা এটিকে বগি বলতে পারি না, কারণ এটির চলমান জরিমানা খাটো করার আগে।
আপনি 14

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