2013-10-18 29 views
5

Tôi có một nghi ngờjavascript chức năng với chức năng trong biến

Mã của tôi: -

function f() { 
    var g = function() 
    { 
    return 1; 
    } 
    return g; 
    }; 

Làm thế nào để tôi có thể gọi g? Tôi muốn trả lại 1 lần và một lần nữa tôi muốn trả lại g.

Tôi đã làm một nghiên cứu Tôi tìm thấy một giải pháp

Làm sao chúng ta có thể gọi g là: -

f()(); 

Tại sao điều này là ?? f()(); bằng JavaScript là gì. tại sao chúng ta không thể đạt được điều này bằng cách sử dụng f.g hoặc một cái gì đó.

Làm cách nào để trả về g từ hàm f ??

Hãy làm rõ những nghi ngờ của tôi?

+0

xin vui lòng đọc https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions_and_function_scope –

Trả lời

11

How can I return g from that function?

Bạn trở g từ "chức năng", giả định "hàm" là f. Vì f trả về một hàm, bạn có thể gọi giá trị trả về với f()(). Đó là khá nhiều giống như thế này:

var returnedFunction = f(); 
returnedFunction(); 

why not we can achieve this using f.g or something?

g không phải là một tài sản của f. Tôi không hoàn toàn chắc chắn những gì bạn đang nhắm đến, nhưng có lẽ bạn muốn f là một nhà xây dựng, và các trường hợp của nó để có một phương pháp g?

function f() { 
    // Constructor function 
} 
f.prototype.g = function() { 
    // Method 
}; 
var myF = new f(); 
myF.g(); // Now `g` is accessible as a property of the instance 

Hoặc bạn có thể đã dự định g trở thành một tài sản tĩnh của f:

function f() { 
    // JS has first-class functions so you can set properties on them 
} 
f.g = function() { 
    // Static method of `f` 
}; 
f.g(); 
+0

Cảm ơn nó thực sự hữu ích :) –

1

Bởi vì bạn return g đó là một hàm. Hàm này trả về có thể được gọi lại.

Bạn call f() trả về một hàm có thể gọi lại f()() (dấu ngoặc đơn thứ hai). Trong hai phần:

1. var returnValue = f(); // returnValue = function g() { return 1;} 
2. returnValue(); // execute function 
0

f()(); có thể được tạm dịch sang:

var g=f();//return g 
g();//invocation of g 
2

bạn f() đang trở lại một chức năng và thứ hai () có nghĩa bạn đang gọi hàm.

Hãy suy nghĩ về nó như thế này

var g = f(); 
g(); 

Trừ khi bạn làm f()() bạn về cơ bản nội tuyến biến.

Nếu bạn muốn gọi nó bằng cách sử dụng f.g(), bạn cần khai báo f làm đối tượng hoặc thêm g làm tài sản.

function f() { 
    this.g = function() { 
    return 1; 
    }; 
} 
new f().g(); 

or 

var f = { 
    g: function() { 
    return 1; 
    } 
} 
f.g(); 

Nhưng tôi không phải là 100% những gì bạn đang cố gắng hoàn thành.

0

bạn có thể làm điều này

var f = function(){}; 
f.prototype={ 
     g : function() 
    { 
     return 1; 
    } 
}; 

bây giờ bạn có thể sử dụng nó như

var v = new f(); 
    alert(v.g()); // --> 1 
+0

'SyntaxError: Mã thông báo không mong muốn ('. Tôi không biết bạn đang làm gì với điều đó ... –

+0

Có lỗi đó, Hãy xem các chỉnh sửa Tôi không biết bạn đã đăng tôi đã viết bài này le bạn đã không đăng câu trả lời. – Akshay