2012-07-21 32 views
6
(function(){ 
    var privateSomething = "Boom!"; 
    var fn = function(){} 
    fn.addFunc = function(obj) { 
     alert('Yeah i can do this: '+privateSomething); 
     for(var i in obj) fn[i] = obj[i]; 
    } 
    window.fn=fn; 
})(); 

fn.addFunc({ 
    whereAmI:function() 
    { 
     alert('Nope I\'ll get an error here: '+privateSomething); 
    } 
}); 

fn.whereAmI(); 

Tại sao không thể ở đâuMiI() truy cập privateSomething? và làm thế nào để tôi đặt whereAmI() trong bối cảnh tương tự như addFunc()?Phạm vi Javascript trong chức năng được tiêm

Trả lời

4

Javascript là phạm vi từ vựng: một tên đề cập đến các biến dựa vào vị trí tên được xác định, không phải nơi tên được sử dụng. privateSomething được xem như là một địa phương trong whereAmI, và sau đó trong phạm vi toàn cầu. Nó không được tìm thấy ở một trong những nơi đó.

2

JavaScript có phạm vi từ vựng, chứ không phải phạm vi động (ngoài số this). Xem http://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scoping_and_dynamic_scoping

+0

'this' là từ khóa không phải là biến. Nó không liên quan gì đến phạm vi. – Esailija

+0

Gotcha. Vì vậy, không đi vào nhận được biến đó huh? – lilturtle

+0

'this' là tham chiếu đến một đối tượng (hoặc' undefined'), và nó được giải quyết động. – 1983

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