2010-10-22 35 views
9

Với JavaScript sau:Biến JavaScript Truy cập cục bộ với cùng một tên trong Inner và Outer Phạm vi

var someFunction = function(id) { 
    //do some stuff 
    var modifyId = function(id) { 
    //do some stuff 
    outer.id = id; //is there any way to modify the id variable in the outer scope from here? 
    } 
} 

Làm thế nào để bạn sửa đổi id chuyển vào phạm vi chức năng bên ngoài từ bên trong phạm vi chức năng bên trong?

+0

Tất cả các câu trả lời vào một: bạn không thể, bạn phải đổi tên một trong số chúng –

Trả lời

10

Thật không may là bạn không thể. Bằng cách đặt tên tham số trong hàm lồng nhau id, bạn đã che giấu tham số trong hàm ngoài. Javascript không chứa cơ sở nào để truy cập tên bóng mờ. Tùy chọn duy nhất là chọn một tên khác cho một trong các biến.

1

Tại sao bạn không thể đổi tên một trong các biến?

2

Không, không có. Từ bên trong một hàm, không có cách nào (có gì đó lạ trong mã của Mozilla hoặc ES5 sang một bên) để tham chiếu phạm vi như một ngữ cảnh theo bất kỳ cách nào rõ ràng, và không có cách nào leo lên chuỗi phạm vi từ vựng theo bất kỳ cách trực tiếp nào.

Câu hỏi hay.

1
var someFunction = function(id) { 
    //do some stuff 
    var oid = id; 
    var modifyId = function(id) { 
    //do some stuff 
    // you can access the outer id via the oid variable 
    } 
} 

Nhưng, có, bạn chỉ cần đổi tên một trong các thông số chính thức.

+0

Lúc đầu, tôi nghĩ điều này đã hiệu quả, nhưng nó sẽ không hoạt động nếu id là nguyên thủy. Đặt 'oid =" BLAH "' từ hàm bên trong sẽ không thay đổi giá trị của id. Nếu nó là một đối tượng, cả id và oid sẽ trỏ đến cùng một đối tượng, gần như là hiệu ứng bạn muốn (bạn vẫn không thể thay đổi id đối tượng trỏ đến bằng cách gọi 'oid = {a: 1}' –

+0

@Juan Kể từ khi id là một chuỗi (tôi giả định), điều đó có nghĩa rằng công việc của tôi xung quanh là khá nhiều vô ích trong trường hợp này.Vì vậy, giải pháp duy nhất vẫn còn để tránh các thông số chính thức với cùng tên trong các chức năng lồng nhau. –

Các vấn đề liên quan