Hướng dẫn how can i access a variable value of a function from another function in javascript? - Làm cách nào để truy cập giá trị biến của một hàm từ một hàm khác trong javascript?

Tôi đã nghe từ nhiều nơi mà các biến số toàn cầu vốn đã khó chịu và xấu xa, nhưng khi thực hiện một số JavaScript không theo định hướng đối tượng, tôi không thể thấy làm thế nào để tránh chúng. Giả sử tôi có một hàm tạo ra một số sử dụng thuật toán phức tạp bằng cách sử dụng các số và công cụ ngẫu nhiên, nhưng tôi cần tiếp tục sử dụng số cụ thể đó trong một số hàm khác là một cuộc gọi lại hoặc một cái gì đó và do đó không thể là một phần của cùng một hàm.

Nếu số được tạo ban đầu là một biến cục bộ, nó sẽ không thể truy cập được từ đó. Nếu các chức năng là phương thức đối tượng, tôi có thể biến số một thuộc tính nhưng chúng không và có vẻ hơi quá mức để thay đổi toàn bộ cấu trúc chương trình để thực hiện việc này. Là một biến toàn cầu thực sự rất tệ?

Hướng dẫn how can i access a variable value of a function from another function in javascript? - Làm cách nào để truy cập giá trị biến của một hàm từ một hàm khác trong javascript?

Andreas Grech

104K98 Huy hiệu vàng290 Huy hiệu bạc359 Huy hiệu đồng98 gold badges290 silver badges359 bronze badges

hỏi ngày 2 tháng 1 năm 2009 lúc 15:16Jan 2, 2009 at 15:16

1

Tôi nghĩ rằng đặt cược tốt nhất của bạn ở đây có thể là xác định một biến số lượng toàn cầu duy nhất và bỏ các biến của bạn ở đó:

var MyApp = {}; // Globally scoped object

function foo(){
    MyApp.color = 'green';
}

function bar(){
    alert(MyApp.color); // Alerts 'green'
} 

Không ai nên la mắng bạn vì đã làm điều gì đó như trên.

Đã trả lời ngày 2 tháng 1 năm 2009 lúc 15:24Jan 2, 2009 at 15:24

Ngân hàng Kenan BankskenanKenan Banks

201K34 Huy hiệu vàng151 Huy hiệu bạc171 Huy hiệu đồng34 gold badges151 silver badges171 bronze badges

5

Để thực hiện một biến được tính toán trong hàm A có thể nhìn thấy trong hàm B, bạn có ba lựa chọn:

  • biến nó thành toàn cầu,
  • biến nó thành một thuộc tính đối tượng hoặc
  • Vượt qua nó dưới dạng tham số khi gọi B từ A.

Nếu chương trình của bạn khá nhỏ thì Globals không quá tệ. Nếu không, tôi sẽ xem xét sử dụng phương pháp thứ ba:

function A()
{
    var rand_num = calculate_random_number();
    B(rand_num);
}

function B(r)
{
    use_rand_num(r);
}

Đã trả lời ngày 2 tháng 1 năm 2009 lúc 15:22Jan 2, 2009 at 15:22

Hướng dẫn how can i access a variable value of a function from another function in javascript? - Làm cách nào để truy cập giá trị biến của một hàm từ một hàm khác trong javascript?

Paul Stephensonpaul StephensonPaul Stephenson

65.5K9 Huy hiệu vàng49 Huy hiệu bạc51 Huy hiệu Đồng9 gold badges49 silver badges51 bronze badges

5

Cân nhắc sử dụng không gian tên:

(function() {
    var local_var = 'foo';
    global_var = 'bar'; // this.global_var and window.global_var also work

    function local_function() {}
    global_function = function() {};
})();

Cả local_functionglobal_function đều có quyền truy cập vào tất cả các biến địa phương và toàn cầu.

Chỉnh sửa: Một mẫu phổ biến khác:: Another common pattern:

var ns = (function() {
    // local stuff
    function foo() {}
    function bar() {}
    function baz() {} // this one stays invisible

    // stuff visible in namespace object
    return {
        foo : foo,
        bar : bar
    };
})();

Các thuộc tính ____10 hiện có thể được truy cập thông qua đối tượng không gian tên, ví dụ:

function A()
{
    var rand_num = calculate_random_number();
    B(rand_num);
}

function B(r)
{
    use_rand_num(r);
}
1, trong khi vẫn giữ quyền truy cập vào các định nghĩa cục bộ.

Đã trả lời ngày 2 tháng 1 năm 2009 lúc 15:33Jan 2, 2009 at 15:33

ChristophchristophChristoph

161K36 Huy hiệu vàng177 Huy hiệu bạc235 Huy hiệu Đồng36 gold badges177 silver badges235 bronze badges

2

Những gì bạn đang tìm kiếm được gọi là kỹ thuật Currying.

function getMyCallback(randomValue)
{
    return function(otherParam)
    {
        return randomValue * otherParam //or whatever it is you are doing.
    }

}

var myCallback = getMyCallBack(getRand())

alert(myCallBack(1));
alert(myCallBack(2));

Trên đây không chính xác là một hàm bị xáo trộn nhưng nó đạt được kết quả của việc duy trì giá trị hiện có mà không cần thêm các biến vào không gian tên toàn cầu hoặc yêu cầu một số kho lưu trữ đối tượng khác cho nó.

Đã trả lời ngày 2 tháng 1 năm 2009 lúc 15:23Jan 2, 2009 at 15:23

AnthonywjonesanthonywjonesAnthonyWJones

185K34 Huy hiệu vàng231 Huy hiệu bạc 304 Huy hiệu đồng34 gold badges231 silver badges304 bronze badges

3

Tôi thấy điều này cực kỳ hữu ích liên quan đến câu hỏi ban đầu:

Trả về giá trị bạn muốn sử dụng trong funcentOne, sau đó gọi functionOne trong functiontwo, sau đó đặt kết quả vào một var mới và tham chiếu var mới này trong functiontwo. Điều này sẽ cho phép bạn sử dụng var được khai báo trong funcentOne, trong functiontwo.

function functionOne() {
  var variableThree = 3;
  return variableThree;
}

function functionTwo() {
  var variableOne = 1;
  var var3 = functionOne();

  var result = var3 - variableOne;

  console.log(variableOne);
  console.log(var3);
  console.log('functional result: ' + result);
}

functionTwo();

Đã trả lời ngày 12 tháng 6 năm 2014 lúc 8:04Jun 12, 2014 at 8:04

gav_aus_webgav_aus_webgav_aus_web

1893 Huy hiệu bạc14 Huy hiệu đồng3 silver badges14 bronze badges

Nếu một chức năng khác cần sử dụng một biến, bạn sẽ chuyển nó đến hàm như một đối số.

Ngoài ra các biến toàn cầu vốn không phải là khó chịu và xấu xa. Miễn là chúng được sử dụng đúng cách, không có vấn đề gì với chúng.

Đã trả lời ngày 2 tháng 1 năm 2009 lúc 15:21Jan 2, 2009 at 15:21

Adam Peckadam PeckAdam Peck

6.8383 Huy hiệu vàng23 Huy hiệu bạc27 Huy hiệu đồng3 gold badges23 silver badges27 bronze badges

1

Nếu có cơ hội bạn sẽ sử dụng lại mã này, thì có lẽ tôi sẽ nỗ lực để đi với một quan điểm hướng đối tượng. Sử dụng không gian tên toàn cầu có thể nguy hiểm - bạn có nguy cơ khó tìm lỗi do các tên biến được sử dụng lại. Thông thường tôi bắt đầu bằng cách sử dụng một cách tiếp cận hướng đối tượng cho bất cứ điều gì nhiều hơn một cuộc gọi lại đơn giản để tôi không phải làm điều viết lại. Bất cứ khi nào bạn có một nhóm các chức năng liên quan trong JavaScript, tôi nghĩ, đó là một ứng cử viên cho một cách tiếp cận hướng đối tượng.

Đã trả lời ngày 2 tháng 1 năm 2009 lúc 15:22Jan 2, 2009 at 15:22

Paul Stephensonpaul Stephensontvanfosson

65.5K9 Huy hiệu vàng49 Huy hiệu bạc51 Huy hiệu Đồng97 gold badges695 silver badges793 bronze badges

Cân nhắc sử dụng không gian tên:

Cả local_functionglobal_function đều có quyền truy cập vào tất cả các biến địa phương và toàn cầu.

Chỉnh sửa: Một mẫu phổ biến khác:

Các thuộc tính ____10 hiện có thể được truy cập thông qua đối tượng không gian tên, ví dụ:

function A()
{
    var rand_num = calculate_random_number();
    B(rand_num);
}

function B(r)
{
    use_rand_num(r);
}
1, trong khi vẫn giữ quyền truy cập vào các định nghĩa cục bộ.

function objFacility(id, name, adr, city, state, zip) {

    return objFacility[id] = {

        id: id,
        name: name,
        adr: adr,
        city: city,
        state: state,
        zip: zip

    }
}

objFacility('wlevine', 'Levine', '23 Skid Row', 'Springfield', 'Il', 10010);

Đã trả lời ngày 2 tháng 1 năm 2009 lúc 15:33

objFacility.wlevine

Christophchristoph

161K36 Huy hiệu vàng177 Huy hiệu bạc235 Huy hiệu ĐồngFeb 23, 2013 at 15:48

Những gì bạn đang tìm kiếm được gọi là kỹ thuật Currying.

Trên đây không chính xác là một hàm bị xáo trộn nhưng nó đạt được kết quả của việc duy trì giá trị hiện có mà không cần thêm các biến vào không gian tên toàn cầu hoặc yêu cầu một số kho lưu trữ đối tượng khác cho nó.

Đã trả lời ngày 2 tháng 1 năm 2009 lúc 15:23Jan 2, 2009 at 15:23

AnthonywjonesanthonywjonesArthur Thomas

5,0051 Huy hiệu vàng25 Huy hiệu bạc31 Huy hiệu đồng1 gold badge25 silver badges31 bronze badges

Bạn hoàn toàn có thể kiểm soát việc thực thi các hàm javascript (và vượt qua các biến giữa chúng) một cuộc gọi Ajax).

Đây là câu trả lời (quan trọng: đó không phải là câu trả lời được kiểm tra mà là câu trả lời của tôi "Emile"):

Cách nhận một biến được trả về trên nhiều chức năng - JavaScript/JQuery

Đã trả lời ngày 22 tháng 8 năm 2010 lúc 7:54Aug 22, 2010 at 7:54

Kyle Cureaukyle CureauKyle Cureau

Phim huy hiệu vàng 18.6K2323 gold badges73 silver badges102 bronze badges

Làm thế nào có thể sử dụng một giá trị biến chức năng trong một hàm khác trong JavaScript?

Đây là một số mã: window.onload = function show () {var x = 3; } hàm Trig () {alert (x); } trig ();window. onload = function show(){ var x = 3; } function trig(){ alert(x); } trig();

Làm thế nào để bạn sử dụng một biến từ một chức năng khác?

Biến có thể được gán cho đối tượng hàm bên trong phần thân hàm.Vì vậy, biến chỉ tồn tại sau khi hàm được gọi.Khi hàm đã được gọi, biến sẽ được liên kết với đối tượng hàm.. So the variable exists only after the function has been called. Once the function has been called, the variable will be associated with the function object.

Tôi có thể truy cập một biến bên trong một hàm javascript không?

Các biến phạm vi hàm được xác định bên trong một hàm không thể được truy cập từ bất cứ nơi nào bên ngoài hàm, bởi vì biến chỉ được xác định trong phạm vi của hàm.Tuy nhiên, một hàm có thể truy cập tất cả các biến và hàm được xác định bên trong phạm vi mà nó được xác định.a function can access all variables and functions defined inside the scope in which it is defined.

Chúng ta có thể truy cập vào chức năng Biến bên ngoài trong JavaScript không?

Các biến được khai báo trên toàn cầu (bên ngoài bất kỳ chức năng nào) có phạm vi toàn cầu.Các biến toàn cầu có thể được truy cập từ bất cứ đâu trong chương trình JavaScript.Các biến được khai báo với VAR, LET và Const khá giống nhau khi được khai báo bên ngoài một khối.Global variables can be accessed from anywhere in a JavaScript program. Variables declared with var , let and const are quite similar when declared outside a block.