2013-07-11 31 views
19

Tôi gặp vấn đề này đôi khi nhưng vẫn không biết nguyên nhân gây ra nó.Tham chiếuError: biến không được xác định

Tôi có kịch bản này trong trang:

$(function(){ 
    var value = "10"; 
}); 

Nhưng trình duyệt nói "ReferenceError: giá trị không được xác định". Tuy nhiên, nếu tôi đi đến trình duyệt giao diện điều khiển và đầu vào hoặc

10 

hoặc

var value = "10"; 

ai trong số họ có thể trở lại 10 vấn đề với kịch bản của tôi là gì?

Chỉnh sửa: chỉ cần loại bỏ "var" có thể giải quyết được sự cố.

Trả lời

29

Nó được khai báo bên trong một đóng cửa, có nghĩa là nó chỉ có thể được truy cập ở đó. Nếu bạn muốn có một biến truy cập trên toàn cầu, bạn có thể loại bỏ các var:

$(function(){ 
    value = "10"; 
}); 
value; // "10" 

này tương đương với văn bản window.value = "10";.

+0

Hi McGarnagle nó giải quyết được vấn đề! Cảm ơn rất nhiều. Nhưng sự khác biệt giữa có hoặc không có var –

+1

@LionLiu: Với 'var', địa phương của nó là' hàm' được khai báo trong đó. Không có 'var', toàn cục của nó. –

+0

Hi @McGarnagle, tôi đã khai báo var a = 0 bên trong hàm jquery sẵn sàng của mình và đang gọi hàm với biến này làm tham số từ biểu mẫu của onsubmit, nhưng tôi vẫn gặp lỗi tham chiếu, nếu biến là toàn cầu, đã làm việc như tham số cho hàm đó nhưng nó không hoạt động, tôi chỉ muốn biết lý do chính xác nếu bạn biết. Cảm ơn bạn đã dành thời gian. – noobcode

4

Biến chỉ khả dụng 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 ngoài chức năng (và tất nhiên là trước khi nó) và sau đó gán 10 để 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 (var value;) , bởi vì nếu không bạn chỉ định giá trị cho biến không xác định. Đây là thực hành mã hóa không tốt và sẽ không hoạt động ở chế độ nghiêm ngặt. Định nghĩa một biến (var variable;) và gán giá trị cho một biến (variable = value;) là hai thứ khác nhau. Bạn không thể gán giá trị cho biến mà bạn chưa xác định.

Có thể không có liên quan ở đây, nhưng $(function() {}) là lối tắt cho $(document).ready(function() {}), thực thi chức năng ngay khi tài liệu được tải. Nếu bạn muốn thực hiện điều 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à undefined cho đến khi nó được tải, vì vậy console.log(value); được đặt ngay sau $(function() {}) sẽ trả lại undefined. Nói cách khác, nó sẽ thực hiện theo thứ tự sau đây:

var value; 
console.log(value); 
value = "10"; 

Xem thêm:

0

Got lỗi (trong hàm init) như sau mã;

"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 Samsung galaxy Fame (điện thoại cố định làm cho nó trở thành người thử nghiệm tốt) - userAgent; Mozilla/5.0 (Linux; U; Android 4.1.2; vi-gb; GT-S6810P Xây dựng/JZO54K) AppleWebKit/534.30 (KHTML, như Gecko) Phiên bản/4.0 Mobile Safari/534.30

Mã giống nhau hoạt động ở mọi nơi khác 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; vi-gb; HTC_WildfireS_A510e Xây dựng/GRJ90) AppleWebKit/533.1 (KHTML, như Gecko) Phiên bản/4.0 Mobile Safari/533.1

Sửa lỗi này là thay đổi

var hdr ; 

để

var hdr = null ; 
Các vấn đề liên quan