Đôi khi tôi đã gặp vấn đề này nhưng vẫn không biết điều gì gây ra nó.
Tôi có tập lệnh này trong trang:
$[function[]{
var value = "10";
}];
Nhưng trình duyệt nói "Tham chiếu HERROR: Giá trị không được xác định". Tuy nhiên, nếu tôi truy cập bảng điều khiển trình duyệt và nhập
10
hoặc
var value = "10";
Một trong số họ có thể trả lại 10. Vấn đề với tập lệnh của tôi là gì?
miken32
40.6K16 Huy hiệu vàng100 Huy hiệu bạc140 Huy hiệu đồng16 gold badges100 silver badges140 bronze badges
Hỏi ngày 11 tháng 7 năm 2013 lúc 1:19Jul 11, 2013 at 1:19
0
Nó được tuyên bố bên trong một đóng cửa, điều đó có nghĩa là nó chỉ có thể được truy cập ở đó. Nếu bạn muốn có một biến có thể truy cập được trên toàn cầu, bạn có thể xóa var
:
$[function[]{
value = "10";
}];
value; // "10"
Điều này tương đương với việc viết
10
0.Đã trả lời ngày 11 tháng 7 năm 2013 lúc 1:22Jul 11, 2013 at 1:22
McGarnaglemcgarnagleMcGarnagle
99.6K30 Huy hiệu vàng225 Huy hiệu bạc259 Huy hiệu Đồng30 gold badges225 silver badges259 bronze badges
5
Các biến chỉ có sẵn trong phạm vi bạn đã xác định chúng. Nếu bạn xác định một biến bên trong một hàm, bạn sẽ không thể truy cập nó bên ngoài nó.
Xác định biến với var
bên ngoài hàm [và tất nhiên là trước đó] và sau đó gán
10
2 cho nó bên trong chức năng:var value;
$[function[] {
value = "10";
}];
console.log[value]; // 10
Lưu ý rằng bạn không nên bỏ qua dòng đầu tiên trong mã này [
10
3], vì nếu không, bạn đang gán giá trị cho biến không xác định. Đây là thực hành mã hóa xấu và sẽ không hoạt động ở chế độ nghiêm ngặt. Xác định một biến [10
4] và gán giá trị cho một biến [10
5] là hai điều khác nhau. Bạn không thể gán giá trị cho biến mà bạn chưa xác định.Nó có thể không liên quan ở đây, nhưng
10
6 là một lối tắt cho 10
7, thực hiện một chức năng ngay khi tài liệu được tải. Nếu bạn muốn thực hiện một cái gì đó ngay lập tức, bạn không cần nó, nếu không hãy cẩn thận rằng nếu bạn chạy nó trước khi DOM tải, giá trị sẽ là 10
8 cho đến khi nó được tải, do đó, 10
9 được đặt ngay sau khi 10
6 sẽ trả về 10
8. Nói cách khác, nó sẽ thực hiện theo thứ tự sau:var value;
console.log[value];
value = "10";
Xem thêm:
- Phạm vi của các biến trong JavaScript là gì?
- Tôi đã nghe các biến toàn cầu là xấu, tôi nên sử dụng giải pháp thay thế nào?
Đã trả lời ngày 29 tháng 12 năm 2015 lúc 8:55Dec 29, 2015 at 8:55
Có lỗi [trong chức năng init] với mã sau;
"use strict" ;
var hdr ;
function init[]{ // called on load
hdr = document.getElementById["hdr"];
}
... Trong khi sử dụng trình duyệt chứng khoán trên danh tiếng Samsung Galaxy [điện thoại crap làm cho nó trở thành một người thử nghiệm tốt] - useragent; Mozilla/5.0 [Linux; U; Android 4.1.2; EN-GB; GT-S6810P Build/JZO54K] AppleWebKit/534.30 [Khtml, như Gecko] phiên bản/4.0 Mobile Safari/534.30
Mã tương tự hoạt động ở mọi nơi mà tôi đã thử bao gồm trình duyệt chứng khoán trên điện thoại HTC cũ hơn - Useragent; Mozilla/5.0 [Linux; U; Android 2.3.5; en-GB; htc_wildfires_a510e build/grj90] applewebkit/533.1 [khtml, như Gecko] phiên bản/4.0 Mobile Safari/533.1
Cách khắc phục cho điều này là thay đổi
var hdr ;
đến
var hdr = null ;
Đã trả lời ngày 11 tháng 1 năm 2017 lúc 15:25Jan 11, 2017 at 15:25
BobbobBob
1.48916 huy hiệu bạc24 Huy hiệu đồng16 silver badges24 bronze badges
Làm thế nào để bạn kiểm tra xem biến JavaScript có được xác định không? Toán tử loại sẽ kiểm tra xem một biến có được xác định hay không. Toán tử typeof không ném ngoại lệ tham chiếu khi nó được sử dụng với biến không được khai báo. Loại null sẽ trả về một đối tượng. Làm việc với ngôn ngữ lập trình thường khiến người ta gặp lỗi thường xuyên, nhưng biết cách tìm lỗi và cách khắc phục lỗi không gì khác hơn là kỹ năng. Lỗi tham chiếu JavaScript là một lỗi khá phổ biến mà mọi người gặp phải [đặc biệt là người mới bắt đầu]. Nếu biến không được khai báo, thì nó sẽ không chiếm vị trí bộ nhớ hoặc địa chỉ. Theo tuyên bố này, thật dễ dàng để kết luận rằng sự tham chiếu của người dùng này - biến không được xác định là xảy ra khi biến mà lập trình viên đang cố gắng truy cập trước đó chưa được khai báo trước khi tuyên bố gây ra lỗi.Lỗi này chỉ đơn giản có nghĩa là tồn tại một dòng như vậy trong mã đang nói với trình biên dịch truy cập một biến hoặc một đối tượng không có địa chỉ hoặc vị trí bộ nhớ. Một kịch bản như vậy xảy ra khi biến tập trung ở đây chưa được khởi tạo hoặc khai báo.
Thông báo lỗi của tham chiếu của mạng - biến không được định nghĩa
Thông báo lỗi của thông báo tham chiếu, thoạt nhìn, có vẻ rất khó khăn vì nó trông giống như thế này:
Thông báo lỗi chứa khoảng 10 dòng khác nhau và tất cả các dòng này kể một câu chuyện khác nhau về lý do tại sao lỗi được gây ra. Bây giờ, nếu lập trình viên truy cập các tệp được liên kết trong 10 dòng này và cố gắng tìm ra lỗi, anh ta sẽ thấy mình trong một mê cung.
Phá vỡ thông báo lỗi của tài liệu tham khảo trên mạng - biến không được xác định
- Hãy xem ảnh chụp màn hình sau của cùng một thông báo lỗi đã được sử dụng trong phần trước: This is the JavaScript statement that has caused the error
- Hãy để giải thích các dấu hiệu được thực hiện trên ảnh chụp màn hình: This is the variable whose reference the compiler couldn’t find
- 1: Đây là câu lệnh JavaScript đã gây ra lỗi The file name and the line number of the statement which caused the error
- 2: Đây là biến có tài liệu tham khảo mà trình biên dịch không thể tìm thấy Files of the environment that led to error [Ignore these lines]
3: Tên tệp và số dòng của câu lệnh gây ra lỗi
functionAddnums [num1, num2] {returnNum1 + num2;} result = addNums [5, 6];[num1, num2] {
returnnum1 + num2;
}
result = addNums[5 , 6];
Console.log [kết quả];log[results];
Các dòng trên làm như sau:
- Tạo một hàm addnums trả về tổng của hai số được truyền bên trong các đối số của nóaddNums which returns the sum of two number passed inside its arguments
- Sử dụng hàm để tính tổng 5 và 6 và lưu trữ giá trị trả về trong biến kết quảresult variable
- In kết quả bằng cách sử dụng biến kết quảresults variable
Thực hiện mã tạo ra thông báo lỗi sau:
Nó nói rằng biến kết quả của người Viking có thể được tham chiếu và chỉ vào dòng số 6. Bây giờ, so sánh dòng 6 và dòng 4:“results” variable couldn’t be referenced and points to the line number 6. Now, compare line 6 and line 4:
result = addNums [5+6]; // dòng số 4= addNums[5 + 6]; // Line Number 4
Console.log [Kết quả]; // Lòng số 6log[results]; // Line number 6
Rõ ràng là lỗi được gây ra do lỗi chính tả của tên của biến trong dòng số 6. Sửa lỗi chính tả của định danh có giá trị trả về của hàm thành:
result = addNums [5+6]; // dòng số 4= addNums[5 + 6]; // Line Number 4
Console.log [Kết quả]; // Lòng số 6log[result]; // Line number 6
Rõ ràng là lỗi được gây ra do lỗi chính tả của tên của biến trong dòng số 6. Sửa lỗi chính tả của định danh có giá trị trả về của hàm thành:
Console.log [result]; // dòng số 6
Sau đó, thực hiện chương trình và quan sát đầu ra sau:
Đầu ra cho thấy chương trình hiện đang hoạt động mà không có bất kỳ lỗi nào
Sự kết luận
Biến tham chiếu JavaScript - Biến không được xác định là cố gắng truy cập một biến bằng định danh của nó chưa được khai báo trước câu lệnh đó. Điều này có thể được gây ra bởi lỗi chính tả hoặc đơn giản là thiếu toàn bộ một tuyên bố trong đó lập trình viên được cho là tuyên bố biến. Cách khắc phục phương thức này là chuyển đến số dòng được đề cập trong thông báo lỗi và sửa tên của biến hoặc khai báo biến trước câu lệnh đó.