1: ขอบเขตขอบเขต
การคัดลอกรหัสมีดังนี้:
(การทำงาน() {
var a = b = 5;
-
console.log (b);
อะไรจะพิมพ์บนคอนโซล?
คำตอบ
รหัสด้านบนจะพิมพ์ 5
เคล็ดลับสำหรับปัญหานี้คือมีการประกาศตัวแปรสองครั้งที่นี่ แต่ประกาศใช้คำหลัก var แสดงให้เห็นว่ามันเป็นตัวแปรท้องถิ่นของฟังก์ชั่น ในทางตรงกันข้าม B กลายเป็นตัวแปรระดับโลก
เคล็ดลับอีกประการหนึ่งสำหรับปัญหานี้คือมันไม่ได้ใช้โหมดที่เข้มงวด ('ใช้อย่างเข้มงวด';) หากเปิดใช้งานโหมดที่เข้มงวดโค้ดจะเพิ่มข้อผิดพลาด ReferenceRoror: B ไม่ได้กำหนดไว้ โปรดจำไว้ว่าโหมดที่เข้มงวดคุณต้องระบุอย่างชัดเจนเพื่อใช้การประกาศตัวแปรทั่วโลก ตัวอย่างเช่นคุณควรเขียน:
การคัดลอกรหัสมีดังนี้:
(การทำงาน() {
'ใช้อย่างเข้มงวด';
var a = window.b = 5;
-
console.log (b);
2: สร้างวิธี "เนทีฟ"
กำหนดฟังก์ชั่นการทำซ้ำสำหรับวัตถุสตริง เมื่อจำนวนเต็ม N ถูกส่งผ่านมันจะส่งคืนผลลัพธ์ของสตริงซ้ำ N ครั้ง ตัวอย่างเช่น:
การคัดลอกรหัสมีดังนี้:
console.log ('hello'.repeatify (3));
ควรพิมพ์สวัสดีเฮลโลเฮลโล
คำตอบ
การใช้งานที่เป็นไปได้มีดังนี้:
การคัดลอกรหัสมีดังนี้:
string.prototype.repeatify = string.prototype.repeatify || ฟังก์ชั่น (เวลา) {
var str = '';
สำหรับ (var i = 0; i <times; i ++) {
str += สิ่งนี้;
-
return str;
-
ปัญหาการทดสอบความรู้ของนักพัฒนาในปัจจุบันเกี่ยวกับการสืบทอดและต้นแบบของ JavaScript สิ่งนี้ยังตรวจสอบว่านักพัฒนารู้ว่าวัตถุในตัวขยาย (แม้ว่าจะไม่ควรทำ) หรือไม่)
อีกประเด็นหนึ่งที่นี่คือคุณต้องรู้วิธีที่จะไม่แทนที่ฟังก์ชันการทำงานที่อาจได้รับการกำหนด ทดสอบนิยามฟังก์ชั่นไม่ได้มีอยู่ก่อน:
การคัดลอกรหัสมีดังนี้:
string.prototype.repeatify = string.prototype.repeatify || ฟังก์ชั่น (เวลา) {/ * รหัสที่นี่ */};
เทคนิคนี้มีประโยชน์อย่างยิ่งเมื่อคุณถูกขอให้เข้ากันได้กับฟังก์ชั่น JavaScript
3: ประกาศโปรโมชั่น (Hoisting)
เรียกใช้รหัสนี้และส่งออกผลลัพธ์
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นทดสอบ () {
console.log (a);
console.log (foo ());
var a = 1;
ฟังก์ชั่น foo () {
กลับ 2;
-
-
10: ทดสอบ ();
คำตอบ
ผลลัพธ์ของรหัสนี้ไม่ได้กำหนดและ 2
เหตุผลก็คือทั้งตัวแปรและการประกาศฟังก์ชั่นเป็นขั้นสูง (ย้ายไปที่ด้านบนของฟังก์ชัน) แต่ตัวแปรไม่ได้กำหนดค่าใด ๆ ดังนั้นเมื่อพิมพ์ตัวแปรมันมีอยู่ในฟังก์ชัน (มีการประกาศ) แต่ก็ยังไม่ได้กำหนด กล่าวอีกนัยหนึ่งรหัสข้างต้นเทียบเท่ากับสิ่งต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นทดสอบ () {
var a;
ฟังก์ชั่น foo () {
กลับ 2;
-
console.log (a);
console.log (foo ());
a = 1;
-
ทดสอบ();
4: วิธีการทำงานใน JavaScript
ผลลัพธ์ของรหัสต่อไปนี้จะส่งผลอย่างไร? ให้คำตอบ
การคัดลอกรหัสมีดังนี้:
var fullName = 'John Doe';
var obj = {
FullName: 'Colin Ihrig',
เสา: {
FullName: 'Aurelio de Rosa'
getFullName: function () {
ส่งคืนสิ่งนี้ fullname;
-
-
-
console.log (obj.prop.getfullname ());
test var = obj.prop.getfullname;
console.log (ทดสอบ ());
คำตอบ
คำตอบคือ Aurelio de Rosa และ John Doe เหตุผลก็คือในฟังก์ชั่นพฤติกรรมของสิ่งนี้ขึ้นอยู่กับว่าฟังก์ชัน JavaScript ถูกเรียกและกำหนดไม่เพียงแค่กำหนด
ในการโทรครั้งแรก console.log (), getfullname () เรียกว่าเป็นฟังก์ชันของวัตถุ obj.prop ดังนั้นบริบทหมายถึงหลังและฟังก์ชั่นส่งคืน FullName ของวัตถุ ในทางตรงกันข้ามเมื่อ getfullname () ถูกกำหนดให้กับตัวแปรทดสอบบริบทหมายถึงวัตถุส่วนกลาง (หน้าต่าง) นี่เป็นเพราะการทดสอบเป็นแอตทริบิวต์ที่ตั้งไว้โดยปริยายเป็นวัตถุทั่วโลก ด้วยเหตุผลนี้ฟังก์ชั่นส่งคืนชื่อเต็มของหน้าต่างนั่นคือค่าที่กำหนดไว้ในบรรทัดแรก
5: โทร () และสมัคร ()
ตอนนี้ให้คุณแก้ปัญหาก่อนหน้านี้และสร้างคอนโซลสุดท้าย log () พิมพ์ aurelio de rosa
คำตอบ
ปัญหาสามารถเปลี่ยนบริบทของฟังก์ชั่นโดยบังคับให้โทร () หรือใช้ () ด้านล่างฉันจะใช้การโทร () แต่ในกรณีนี้ใช้ () จะส่งออกผลลัพธ์เดียวกัน:
การคัดลอกรหัสมีดังนี้:
console.log (test.call (obj.prop));