কেন জাভাস্ক্রিপ্ট ";" দিয়ে শুরু করা দরকার?


218

আমি সম্প্রতি লক্ষ্য করেছি যে ওয়েবে প্রচুর জাভাস্ক্রিপ্ট ফাইলগুলি ;মন্তব্য বিভাগের সাথে সাথে অনুসরণ করা শুরু করে ।

উদাহরণস্বরূপ, এই jQuery প্লাগইনের কোডটি দিয়ে শুরু হয়:

/**
 * jQuery.ScrollTo
 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 9/11/2008                                      
 .... skipping several lines for brevity...
 *
 * @desc Scroll on both axes, to different values
 * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
 */
;(function( $ ){

ফাইলটি কেন একটি দিয়ে শুরু করা দরকার ;? আমি এই কনভেনশনটি সার্ভার-সাইড জাভাস্ক্রিপ্ট ফাইলগুলিতেও দেখছি।

এটি করার সুবিধা এবং অসুবিধাগুলি কী কী?

উত্তর:


352

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

return {
   'var':'value'
}

শেষ স্ক্রিপ্ট ;শেষে একটি শেষে ছাড়া । আপনার যদি ;শুরুতে থাকে তবে এটি নিরাপদ, উদাহরণ:

return {
   'var':'value'
}
;(function( $ ){ //Safe (still, screw you, last guy!)

return {
   'var':'value'
}
(function( $ ){ //Oh crap, closure open, kaboom!

return {
   'var':'value'
};
;(function( $ ){ //Extra ;, still safe, no harm

8
আপনি আসলে returnকোনও স্ক্রিপ্টের শেষ জিনিস হিসাবে একটি বিবৃতি রাখতে পারবেন না , পারবেন কি? শীর্ষ স্তরে ফিরে আসা কোনও অর্থবোধ করে না। এটা অন্য কিছু হতে হবে, তাই না?
ব্যবহারকারী 2357112 13:43

3
@ ইউজার 2357112 এর চেয়েও বড় কথা, কোনও বিবৃতি দেওয়ার পরে কোড returnকার্যকর হয় না, সুতরাং এটি মিলিয়ে জানার কোনও মানে হয় না। অন্তত একটি }অনুপস্থিত আছে।
রবার্ট

57

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


9
আমি ১০০% নিশ্চিত নই তবে জেরি এই বিষয়ে আমি আপনার সাথে আছি।
ঠিক

12

এই উদাহরণ বিবেচনা করুন:

function a() {
  /* this is my function a */
}
a()
(function() {
  /* This is my closure */
})()

যা ঘটবে তা হ'ল এটিকে মূল্যায়ন করা হবে:

function a() {
  /* this is my function a */
}
a()(function() {})()

তাই যা কখনও aফিরে আসবে সেটিকে আরম্ভ করার চেষ্টা করা একটি ফাংশন হিসাবে ধরা হবে।

এটি বেশিরভাগ ত্রুটিগুলি প্রতিরোধ করার জন্য যখন কোনও ফাইলে একাধিক ফাইলকে একত্র করার চেষ্টা করা হয়:

a.js

function a() {
  /* this is my function a */
}
a()

b.js

(function() {
  /* This is my closure */
})()

যদি আমরা এই ফাইলগুলিকে একত্রে সংহত করি তবে এটি সমস্যার কারণ হবে cause

সুতরাং আপনার ;সামনে রাখার কথা মনে রাখবেন (এবং সম্ভবত আরও কয়েকটি জায়গা। BTW। var a = 1;;;var b = 2;;;;;;;;;var c = a+b;পুরোপুরি বৈধ জাভাস্ক্রিপ্ট

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