سؤال

عندما كود:

var a =
function()
{
    alert("44")
    return function(){alert(33)}
}()();

هو هذا التعبير تقييمها في النظام ؟

  1. تحديد وظيفة ؛
  2. تمرير إشارة مؤشر إلى
  3. أ() هو الاحتجاج
  4. العودة في وظيفة جديدة مؤشر
  5. أ() هو الاحتجاج مرة أخرى

وإذا كان الأمر كذلك لماذا لدي خطأ في بناء الجملة إذا فعلت:

function()
{
    alert("44")
    return function(){alert(33)}
}();

المترجم يريد المعامل الأيسر الأولى...

ولكن هذه الجملة يعمل:

(
  function()
  {
    alert("44")
    return function(){alert(33)}
  };

)()

الخارجي قوسين ماذا يعني???

شكرا

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

المحلول

انها الجملة من اللغة.إذا كنت ترغب في مكان تنفيذ وظيفة مجهول ، يجب أن يرفق في parens.

شبيبة هذه الحالات الحافة حيث الجملة هو أغرب مما كنت تتوقع.خذ على سبيل المثال, evaling سلسلة لديه سلمان لا يعمل إلا إذا كان ملفوفة مع parens.

// Wrong
eval("{ ... }");
// Right
eval("({ ... })");

انها الجملة من اللغة.

وقال أعتقد (وهذا هو بدقة IMHO) الخطوات التي قمت المبين ليست دقيقة.

  1. يتم تعريف الدالة و الاحتجاج.تنبيه("44");يحدث نتيجة لذلك.
  2. ترجع الدالة دالة أخرى وهي أيضا الاحتجاج.تنبيه("33");يحدث.
  3. أعمق وظيفة لا يعود أي شيء ، لذلك هو فعال غير معروف.تشير typeof على إرجاع "غير معروف".

نصائح أخرى

  1. function() { alert("44") return function(){alert(33)} } يمكنك تحديد وظيفة
  2. function() { alert("44") return function(){alert(33)} }() يمكنك استدعاء هذه الدالة تعود وظيفة مجهول function(){alert(33)}
  3. function() { alert("44") return function(){alert(33)} }()() اتصل عاد وظيفة, حتى انها في الواقع ما يعادل function(){alert(33)}()

حتى تنفيذ كامل ما يعادل:

alert("44"); alert(33);

أنا فقط التعلم الذاتي الاحتجاج الوظائف أيضا.
و أعتقد أن يجب أن يكون الكود 3. (function() { alert("44"); return function(){alert(33);} })()()

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