Hướng dẫn pass global variable to function javascript - chuyển biến toàn cục cho hàm javascript

Làm thế nào mà mã sau là cho tôi 0 thay vì 1? Tôi muốn chức năng của mình thay đổi một biến được khai báo bên ngoài hàm nhưng tôi không muốn chỉ định biến trong khai báo chức năng.

that = 0;

function go(input) {
    input++;
}

go(that);

console.log(that);

Hỏi ngày 12 tháng 8 năm 2013 lúc 2:21Aug 12, 2013 at 2:21

Hướng dẫn pass global variable to function javascript - chuyển biến toàn cục cho hàm javascript

1

Như được trả lời bởi Oriol, nó không hoạt động vì biến được truyền theo giá trị, vì vậy bạn không thay đổi biến "đó". Một cách giải quyết sẽ là để vượt qua tên biến:

that = 0;

function test(input) {
    window[input]++;
}

test("that");

console.log(that); // 1

Đã trả lời ngày 12 tháng 8 năm 2013 lúc 2:28Aug 12, 2013 at 2:28

Phil-RPhil-RPhil-R

2.19317 Huy hiệu bạc21 Huy hiệu đồng17 silver badges21 bronze badges

2

Đó là bởi vì bạn đang chuyển biến theo giá trị, không phải bằng tham chiếu.

Trong JavaScript, tất cả các biến được truyền theo giá trị, ngoại trừ các đối tượng, được truyền bằng tham chiếu (cũng vậy, chúng cũng được truyền bởi giá trị nhưng chúng là một tài liệu tham khảo, xem bên dưới).

Và bạn không thể thay đổi hành vi đó.

Chỉnh sửa: Nếu bạn không biết có nghĩa là đi qua giá trị/tham chiếu nào, bạn nên đọc hướng dẫn. Nhưng ở đây bạn có một số ví dụ: If you don't know what passing by value/reference means, you should read a tutorial. But here you have some examples:

  • Biến được truyền theo giá trị

    function foo(bar){
       console.log(bar); // 1
       bar++;
       console.log(bar); // 2
    }
    var mybar = 1;
    console.log(mybar); // 1
    foo(mybar);
    console.log(mybar); // 1
    
  • Biến được truyền qua (giá trị nhưng được sử dụng làm tài liệu tham khảo)

    function foo(bar){
       console.log(bar.a); // 'b'
       bar.a = 'c';
       console.log(bar.a); // 'c'
    }
    var mybar = {a:'b'};
    console.log(mybar.a); // 'b'
    foo(mybar);
    console.log(mybar.a); // 'c'
    

Trong trường hợp của bạn

Bạn có thể làm

  • Biến biến của bạn thành thuộc tính của một đối tượng (trong trường hợp của bạn, vì nó là biến toàn cầu, sử dụng ____10) và truyền đối tượng (tham chiếu), để bạn có thể thay đổi nó

    window.that = 0;
    function go(obj) {
        obj.that++;
    }
    go(window);
    console.log(that); // 1
    
  • Sử dụng giá trị trả về

    var that = 0;
    function go(input) {
        return input++;
    }
    that = go(that);
    console.log(that); // 1
    

Lưu ý rằng bạn không thể làm

  • Chuyển đổi biến của bạn thành một đối tượng

    var that = new Number(0); // Now it's an object number
    function go(input) {
        input++;
    }
    go(that);
    that *= 1; // Now it's a literal number
    console.log(that); // 0
    

    Đó là bởi vì các đối tượng cũng được truyền bởi giá trị, nhưng chúng là một tài liệu tham khảo. Điều đó có nghĩa là bên trong hàm bạn có thể thay đổi các thuộc tính của đối tượng bên ngoài (vì đó là một tham chiếu) nhưng bạn không thể thay đổi toàn bộ đối tượng, vì nó được truyền bởi giá trị.

    Xem ví dụ tại đây: https://stackoverflow.com/a/3638034/1529630

Đã trả lời ngày 12 tháng 8 năm 2013 lúc 2:22Aug 12, 2013 at 2:22

OrioloriolOriol

260K58 Huy hiệu vàng414 Huy hiệu bạc494 Huy hiệu đồng58 gold badges414 silver badges494 bronze badges

2

Điều này có liên quan đến con trỏ, phạm vi, vượt qua các biến bằng cách tham khảo và tất cả những gì nhạc jazz đó.

Nếu bạn thực sự muốn làm điều này, bạn có thể vượt qua một đối tượng trong JavaScript như thế này:

var that = {value: 0};
function go(input) {
    input.value++;
}
go(that);
console.log(that.value);

Tất cả những gì chúng tôi đã thực hiện được thực hiện rằng một đối tượng theo định nghĩa được truyền như một tài liệu tham khảo trong JavaScript. Sau đó, chúng tôi chỉ đảm bảo rằng chúng tôi sửa đổi đúng các thuộc tính của đối tượng.that an object which is by definition passed as a reference in Javascript. Then we just make sure we properly modify the object's attributes.

Đã trả lời ngày 12 tháng 8 năm 2013 lúc 2:26Aug 12, 2013 at 2:26

Ma cua ban

that = 0; //Global variable

function go(input) { //input is argument and is not passed by reference
    input++; //This just increments a local copy i.e 0
}

go(that); //Passed 0 

console.log(that);

Thay vào đó làm điều này

that = 0;

function go() {
    that++;
}

go(); //Not passing any variable .. function can already see the gloabl "that" 

console.log(that); // This will print gloabl i.e. 1

Đã trả lời ngày 12 tháng 8 năm 2013 lúc 2:29Aug 12, 2013 at 2:29

gâu meo gâu meowoofmeow

2.29015 Huy hiệu bạc12 Huy hiệu đồng15 silver badges12 bronze badges

1

Trên thực tế, bạn chỉ có thể thêm

that = 0;

function test(input) {
    window[input]++;
}

test("that");

console.log(that); // 1
1 bên trong chức năng và nó sẽ hoạt động tốt.

Nêu tôi sai vui long chân chỉnh tôi. Hy vọng tôi đã giúp đỡ !!

Tôi sẽ rất vui nếu ai đó có thể giải thích tại sao tôi sai

Đã trả lời ngày 13 tháng 12 năm 2019 lúc 11:44Dec 13, 2019 at 11:44

Hướng dẫn pass global variable to function javascript - chuyển biến toàn cục cho hàm javascript

0

Chức năng JavaScript có thể truy cập các biến toàn cầu không?

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.. Variables declared with var , let and const are quite similar when declared outside a block.

Làm thế nào để bạn chuyển một giá trị từ một hàm sang một biến JavaScript biến toàn cầu?

Trong trường hợp của bạn..
Biến biến của bạn thành thuộc tính của một đối tượng (trong trường hợp của bạn, vì đó là biến toàn cầu, sử dụng cửa sổ) và chuyển đối tượng (tham chiếu), để bạn có thể thay đổi cửa sổ.rằng = 0;Hàm Go (obj) {obj.....
Sử dụng giá trị trả về var đó = 0;hàm go (đầu vào) {return input ++;} điều đó = đi (đó);Bảng điều khiển ..

Bạn có thể truyền trong một biến trong một hàm javascript không?

Trong JavaScript vượt qua giá trị, hàm được gọi bằng cách truyền trực tiếp giá trị của biến làm đối số.Do đó, ngay cả việc thay đổi đối số bên trong hàm cũng không ảnh hưởng đến biến được truyền từ bên ngoài hàm.. Therefore, even changing the argument inside the function doesn't affect the variable passed from outside the function.

Các biến toàn cầu có hoạt động trong các chức năng không?

Các biến toàn cầu có thể được sử dụng bởi tất cả mọi người, cả bên trong các chức năng và bên ngoài..