سؤال

لقد لاحظت في الآونة الأخيرة أن الكثير من جافا سكريبت الملفات على شبكة الإنترنت تبدأ مع ; عقب قسم التعليق.

على سبيل المثال ، هذا مسج البرنامج المساعد رمز يبدأ مع:

/**
 * 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( $ ){

لماذا الملف تحتاج أن تبدأ مع ;?أرى أن هذه الاتفاقية من جانب الخادم ملفات جافا سكريبت كذلك.

ما هي مزايا وعيوب من فعل هذا ؟

هل كانت مفيدة؟

المحلول

أود أن أقول نظرًا لأن البرامج النصية غالباً ما تكون متسلسلة ومُعجلة/مضغوطة/إرسالها معًا ، هناك فرصة أن يكون لدى الرجل الأخير شيئًا مثل:

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

نصائح أخرى

أعتقد (على الرغم من أنني لست متأكدًا ، لذا يرجى عدم الانقضاض علي) أن هذا سيضمن إغلاق أي بيان مسبق من ملف مختلف. في أسوأ الحالات ، سيكون هذا بيانًا فارغًا ، ولكن في أفضل الحالات ، قد يتجنب محاولة تعقب خطأ في هذا الملف عندما جاء البيان غير المكتملة بالفعل من أعلاه.

النظر في هذا المثال:

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

ما سيحدث هو أنه سيتم تقييم مثل هذا:

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

لذلك ما من أي وقت مضى a تعود سيتم التعامل مع وظيفة أحد حاول أن تكون تهيئة.

هذا هو الغالب لمنع الأخطاء عند محاولة concat تتكاثر الملفات في ملف واحد:

أ.js

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

ب.js

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

إذا كنا concat هذه الملفات معا وسوف يسبب مشاكل.

لذلك تذكر أن تضع يديك ; أمام ( وربما أيضا عدد قليل من الأماكن الأخرى.راجع للشغل. var a = 1;;;var b = 2;;;;;;;;;var c = a+b; هي صحيحة تماما جافا سكريبت

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top