วัตถุประสงค์คือหากมีการประกาศตัวแปรที่ไม่ได้กำหนดไว้จะสามารถกำหนดได้โดยตรงและขอบเขตของตัวแปรไม่สามารถเปลี่ยนแปลงได้
หากไม่ได้ประกาศให้เรียกใช้ใหม่
ฉันค้นหาออนไลน์และพบว่าวิธีการทั่วไปคือถ้า (typeof (a) == 'undefined') {var a = 'ss';},},
อย่างไรก็ตามวิธีนี้จะส่งคืนจริงสำหรับตัวแปรที่ไม่ได้ประกาศหรือไม่ได้ออกแบบ และถ้าเป็นเช่นนั้น:
การคัดลอกรหัสมีดังนี้:
var a;
ฟังก์ชั่น f () {
if (typeof (a) == 'undefined')
{var a = 1;}
-
f ();
console.log (a);
จะไม่ได้กำหนดจะปรากฏขึ้นเนื่องจาก f () เพียงแค่ประกาศตัวแปรท้องถิ่นที่มีชื่อเดียวกัน
อย่างไรก็ตามหากเป็นตัวแปรที่ได้รับการประกาศว่าไม่มีการออกแบบ: ถ้า (novaluev == null) มันจะกลับมาเป็นจริง
ตัวแปรที่ไม่ได้ประกาศ: ถ้า (nodeclarev == null) จะมีการรายงานข้อผิดพลาด
มันสามารถ:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น f () {
if (typeof (v) == 'undefined') {
พยายาม{
ถ้า (v == null) // ระบุว่า v ถูกประกาศว่าไม่มีการออกแบบ
v = 1;
-
จับ (err) {// ระบุว่า V ไม่ได้ประกาศ
var v; v = 2;
-
-
console.log (v);
-
f ();
สิ่งนี้ก็ผิดเพราะ JS มีลักษณะของ 'การประกาศล่วงหน้า' นั่นคือตัวแปรที่ประกาศในฟังก์ชั่นสามารถมองเห็นได้ในฟังก์ชั่นนี้และในฟังก์ชั่นย่อยของฟังก์ชั่นนี้ไม่ว่าจะมีการประกาศในฟังก์ชันที่ไหน
ดังนั้นเนื่องจาก Var V;, ไม่ว่าในกรณีใด ๆ คุณก็ลองเท่านั้น
แก้ไข:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น f () {
if (typeof (v) == 'undefined') {
พยายาม{
ถ้า (v == null) // ระบุว่า v ถูกประกาศว่าไม่มีการออกแบบ
v = 1;
-
จับ (err) {// ระบุว่า V ไม่ได้ประกาศ
eval ('var v'); v = 2; // มันแตกต่างกันที่นี่
-
-
console.log (v);
-
f ();
นั่นคือทั้งหมด
เขียนเป็นฟังก์ชั่นการตัดสินการส่งคืน 'nodeclare' หมายความว่าตัวแปรไม่ได้ประกาศ 'novalue' หมายความว่าตัวแปรได้รับการประกาศโดยไม่ได้รับการกำหนดและ 'Hasvalue' หมายความว่าตัวแปรได้รับการประกาศ:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น f (v) {
if (typeof (v) == 'undefined') {
พยายาม{
ถ้า (v == null)
กลับ 'Novalue';
-
จับ (เอ่อ) {
ส่งคืน 'nodeclare';
-
-
return 'hasvalue';
-
var a;
console.log (f (a));
a = 0;
console.log (f (a));
console.log (f (b));
มันผิดอีกครั้ง ..... จะมีข้อผิดพลาดเมื่อ console.log (f (b)); ...