2013-02-13 33 views
5

Đây là một ví dụ:Tôi đang bối rối về từ khóa 'này' trong JavaScript

function one() { 

    var a = 1; 
    two(); 

    function two() { 

     var b = 2; 
     three(); 

     function three() { 

      var c = 3; 
      alert(a + b + c); // 6 

     } 
    } 
} 

one()​; //calling the function 

Bây giờ khi chúng ta gọi hàm một(), kết quả là 6.

Vì vậy, đó là tất cả về chuỗi phạm vi, tất cả các biến được giải quyết, bây giờ tôi có một câu hỏi.

Tại sao chúng ta cần từ khóa "này" khi tất cả các biến đang được giải quyết thông qua chuỗi phạm vi?

Vì vậy, nếu chúng ta có chức năng sau:

function a() { 
    var a = 'function a'; 

    function b() { 
     var b = 'function b'; 
     alert (a); //will be function a, without keyword this 
     alert (this.a); // what will be the effect of this line 
    } 
} 

Từ khóa "này" luôn bối rối cho tôi!

Ai đó vui lòng giải thích một cách đơn giản và chi tiết.

+0

Đọc bài viết này: http://www.quirksmode.org/js/this.html – BizApps

+0

đây không phải là điều bạn nghĩ. – Mehrdad

Trả lời

-1

Sử dụng này theo từ khóa

Trong vòng một phương pháp dụ hoặc một constructor, đây là một tham chiếu đến đối tượng hiện tại - những đối tượng có phương pháp hoặc constructor được gọi. Bạn có thể tham khảo bất kỳ thành viên nào của đối tượng hiện tại từ bên trong một phương thức thể hiện hoặc một hàm tạo bằng cách sử dụng nó. Sử dụng trường này với một Trường

Lý do phổ biến nhất để sử dụng từ khóa này là do một trường bị che khuất bởi tham số phương thức hoặc hàm tạo.

0

Từ khóa này đề cập đến phạm vi chức năng. Trong mã trên của bạn, this.a sẽ in không xác định vì không có biến có tên a. từ khóa này được sử dụng để tham chiếu phạm vi địa phương hiện tại và không phải phạm vi toàn cầu. vì vậy nếu bạn có một biến có tên là a trong hàm b của bạn thì this.a sẽ tham chiếu biến được định nghĩa trong hàm b và không nằm ngoài nó. Trong khi đó việc đề cập điều này bên ngoài hàm b sẽ tham chiếu phạm vi toàn cầu.

3

Họ từ khóa this được giải quyết bằng những cách sau đây trong một hàm trong JavaScript -

  1. Khi một hàm được gọi trên hoặc thông qua một đối tượng, đối tượng đó là gọi bối cảnh hoặc giá trị 'này' cho hàm. Ví dụ -

    var o = { 
        f : function(){ 
         //do something 
        } 
    } 
    

    nếu chúng ta gọi phương thức 'f' đối tượng 'o' sử dụng đối tượng 'o' -

    o.f()// in method f, 'this' refers to o inside the method o 
    
  2. Nếu chức năng không được viện dẫn trên hay không thông qua một đối tượng, đối tượng cửa sổ hiện tại là ngữ cảnh yêu cầu hoặc giá trị this cho hàm. Ví dụ -

    function f(){ 
        //do something 
    } 
    
    //calling f 
    f();// 'this' will refer to current window object 
    

Trong trường hợp của bạn, điều này có liên quan đến đối tượng cửa sổ hiện tại và this.a là một tham chiếu đến các chức năng một, mà bạn đã xác định trong phạm vi toàn cầu.

Ngoài ra, ngữ cảnh yêu cầu hoặc giá trị 'này' cho chức năng có thể được cung cấp trong khi gọi nó. Vui lòng kiểm tra Function.prototype.call method - JavaScript | MDNFunction.prototype.apply method - JavaScript | MDN

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