ด้วยรหัสนี้:
function baz() {
var x = "foo";
function bar() {
debugger;
};
bar();
}
baz();
ฉันได้รับผลลัพธ์ที่ไม่คาดคิด:
เมื่อฉันเปลี่ยนรหัส:
function baz() {
var x = "foo";
function bar() {
x;
debugger;
};
bar();
}
ฉันได้รับผลลัพธ์ที่คาดหวัง:
นอกจากนี้ถ้ามีการเรียกร้องใด ๆ กับeval
ภายในฟังก์ชั่นภายในที่ฉันสามารถเข้าถึงตัวแปรของฉันเป็นฉันต้องการจะทำ (ไม่สำคัญว่าสิ่งที่ฉันผ่านไปeval
)
ในขณะเดียวกันเครื่องมือ Firefox dev ให้พฤติกรรมที่คาดหวังในทั้งสองสถานการณ์
เกิดอะไรขึ้นกับ Chrome ที่โปรแกรมดีบั๊กทำงานได้สะดวกกว่า Firefox ฉันได้สังเกตพฤติกรรมนี้มาระยะหนึ่งแล้วและรวมถึงรุ่น 41.0.2272.43 เบต้า (64 บิต)
มันเป็นเครื่องมือจาวาสคริปต์ของ Chrome "แบน" ฟังก์ชั่นเมื่อมันสามารถ?
ที่น่าสนใจถ้าฉันจะเพิ่มตัวแปรที่สองที่ถูกอ้างถึงในฟังก์ชั่นภายในที่x
ตัวแปรคือยังไม่ได้กำหนด
ฉันเข้าใจว่ามักจะมีนิสัยใจคอที่มีขอบเขตและคำจำกัดความแปรปรวนเมื่อใช้ดีบักเกอร์แบบโต้ตอบ แต่สำหรับฉันแล้วดูเหมือนว่าตามข้อกำหนดภาษานั้นควรจะเป็นทางออกที่ดีที่สุดสำหรับนิสัยใจคอเหล่านี้ ดังนั้นฉันอยากรู้ว่านี่เป็นเพราะ Chrome มีการปรับให้เหมาะสมยิ่งกว่า Firefox หรือไม่ และการเพิ่มประสิทธิภาพเหล่านี้สามารถปิดการใช้งานได้อย่างง่ายดายในระหว่างการพัฒนาหรือไม่ (อาจต้องปิดการใช้งานเมื่อเปิดเครื่องมือ dev หรือไม่)
นอกจากนี้ฉันสามารถทำซ้ำสิ่งนี้ด้วยจุดพักเช่นเดียวกับdebugger
คำสั่ง
debugger;
bar
ดูที่การติดตามสแต็กเมื่อหยุดในดีบักเกอร์: bar
ฟังก์ชั่นที่กล่าวถึงในสแต็คเทรซหรือไม่? ถ้าฉันพูดถูกสแต็คควรบอกว่ามันหยุดอยู่ที่บรรทัดที่ 5 ที่บรรทัดที่ 7 ที่บรรทัดที่ 9
temp1
ถูกแนบกับคอนโซลและคุณสามารถใช้เพื่อเข้าถึงรายการขอบเขต