Hướng dẫn how to get variable from another function javascript - cách lấy biến từ javascript hàm khác

78

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

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 to get variable from another function javascript - cách lấy biến từ javascript hàm khác

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 to get variable from another function javascript - cách lấy biến từ javascript hàm khác

Paul Stephensonpaul StephensonPaul Stephenson

65,6K9 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.8483 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,6K9 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

Arthur Thomasarthur ThomasArthur 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 cách nào để sử dụng một biến từ hàm này sang chức năng khác trong JavaScript?

hàm function1 () {var biến1 = 12; hàm2 (biến1); } hàm hàm2 (val) {var varable Offeration1 = val; // Sau đó, bạn sẽ phải sử dụng chức năng này cho biến1 để nó không thực sự giúp ích nhiều trừ khi đó là điều bạn muốn làm. } Tôi đã sử dụng cách thứ hai và nó hoạt động. // Then you will have to use this function for the variable1 so it doesn't really help much unless that's what you want to do. } i used the second way and it worked.

Làm thế nào để bạn truy cập một biến từ một chức năng khác?

hàm func1 () {var num1 = 6;Console.log (Num1);} hàm func2 () {var final = num1 + 5;Console.log (cuối cùng);} func2 (); log(num1); } function func2() { var final = num1 + 5; console. log(final); } func2();

Làm thế nào để bạn tìm thấy giá trị của một hàm khác?

Bạn phải vượt qua phạm vi của phương thức gọi hàm mới ...
var a = {b: 4} ;.
var sum = hàm mới ('trả về cái này. b') ;.
Tổng.gọi (a) ;.

Làm thế nào để bạn trả lại và truyền dữ liệu từ hàm này sang hàm khác trong JavaScript?

Nếu giá trị trả về của hàm chỉ được sử dụng làm tham số đầu vào của hàm khác, bạn có thể chuyển giá trị trả về trực tiếp đến tham số hàm.Điều này được thực hiện bằng cách đặt cuộc gọi chức năng vào danh sách tham số của cuộc gọi chức năng khác, giống như bạn sẽ biến.putting the function call in the parameters list of the other function call, just like you would a variable.