فحص بناء الجملة
الأهمية: 2
ما هي نتيجة هذه الشيفرة?
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)()
ملاحظة. هناك مأزق :)
خطأ!
حاول هذا:
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)() // خطأ!
لا تعطينا رسالة الخطأ في معظم المتصفحات الكثير من الأدلة حول الخطأ الذي حدث.
يظهر الخطأ لأن فاصلة منقوطة مفقودة بعد user = {...}
.
لا تقوم جافا سكريبت بإدراج فاصلة منقوطة تلقائيًا قبل قوس ()(user.go)
, إنها تقوم بقراءة الشيفرة هكذا:
let user = { go:... }(user.go)()
ثم يمكننا أن نرى أيضًا أن هذا التعبير المشترك هو عبارة عن استدعاء للكائن { go: ... }
كتابع مع متغير (user.go)
. وهذا يحدث أيضًا على نفس السطر مع let user
, لذلك user
لم يتم حتى الآن تعريف الكائن ، ومن هنا كان الخطأ.
إذا أدخلنا الفاصلة المنقوطة ، فكل شيء على ما يرام:
let user = {
name: "John",
go: function() { alert(this.name) }
};
(user.go)() // John
يرجى ملاحظة أن الأقواس حول (user.go)
لا تفعل شيئ هنا.عادة ما يقومون بإعداد ترتيب العمليات ، ولكن هنا النقطة
.
تعمل أولاً على أي حال, لذلك ليس هناك تأثير. فقط الشيء الفاصلة المنقوطة هو المهم.