Hướng dẫn passing variables between functions javascript - truyền biến giữa các hàm javascript

Dưới đây là 2 chức năng ở dạng đơn giản nhất. Tôi đang làm việc với JQuery.

Cách tốt nhất để chuyển var str từ hàm đầu tiên sang chức năng thứ hai là gì?

function a() {
    var str = "first";
};

function b() {
    var new = str + " second";
};

Hướng dẫn passing variables between functions javascript - truyền biến giữa các hàm javascript

Peterh

11.1K16 Huy hiệu vàng84 Huy hiệu bạc103 Huy hiệu đồng16 gold badges84 silver badges103 bronze badges

hỏi ngày 5 tháng 1 năm 2011 lúc 3:11Jan 5, 2011 at 3:11

0

Sử dụng các tham số chức năng, như thế này:

function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}

Bạn chỉ có thể khai báo một biến cao hơn trong chuỗi phạm vi, nhưng tôi chọn sử dụng các đối số để hạn chế quyền truy cập biến chỉ vào các bối cảnh hoàn toàn cần nó.

Ồ vâng, đó không phải là nguyên tắc của đặc quyền ít nhất sao?

Đã trả lời ngày 5 tháng 1 năm 2011 lúc 3:14Jan 5, 2011 at 3:14

Jacob Relkinjacob RelkinJacob Relkin

159K33 Huy hiệu vàng341 Huy hiệu bạc318 Huy hiệu Đồng33 gold badges341 silver badges318 bronze badges

Bạn cần phải vượt qua nó giữa họ, hoặc dường như từ ví dụ của bạn, chỉ cần khai báo nó trong phạm vi cao hơn:

var str;
function a(){
  str="first";
}
function b(){
  var something = str +" second"; //new is reserved, use another variable name
}

Đã trả lời ngày 5 tháng 1 năm 2011 lúc 3:14Jan 5, 2011 at 3:14

Hướng dẫn passing variables between functions javascript - truyền biến giữa các hàm javascript

Jacob Relkinjacob RelkinNick Craver

159K33 Huy hiệu vàng341 Huy hiệu bạc318 Huy hiệu Đồng134 gold badges1293 silver badges1152 bronze badges

9

Bạn cần phải vượt qua nó giữa họ, hoặc dường như từ ví dụ của bạn, chỉ cần khai báo nó trong phạm vi cao hơn:

 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}

Nick Cravernick CraverJun 3, 2021 at 7:06

Tóm tắt: & NBSP; Hướng dẫn này giải thích cách thức hoạt động của JavaScript Pass-By-Value và cung cấp cho bạn một số ví dụ về việc truyền các giá trị nguyên thủy và tham chiếu cho một hàm.: this tutorial explains how JavaScript pass-by-value works and gives you some examples of passing primitive and reference values to a function.

Trước khi đi về phía trước với hướng dẫn này, bạn nên có kiến ​​thức tốt về các giá trị nguyên thủy và tham chiếu, và sự khác biệt giữa chúng.

JavaScript Pass-By-Value hoặc Pass-Ttef

Trong JavaScript, tất cả các đối số hàm luôn được truyền bởi giá trị. Nó có nghĩa là & nbsp; javascript sao chép các giá trị của các biến vào các đối số hàm.

Bất kỳ thay đổi nào bạn thực hiện đối với các đối số bên trong hàm không phản ánh các biến vượt qua bên ngoài hàm. Nói cách khác, những thay đổi được thực hiện đối với các đối số không được phản ánh bên ngoài hàm.

Nếu các đối số chức năng được truyền bằng tham chiếu, các thay đổi của các biến mà bạn chuyển vào hàm sẽ được phản ánh bên ngoài hàm. Điều này là không thể trong JavaScript.

Qua giá trị của các giá trị nguyên thủy

Hãy cùng xem một ví dụ sau.

function square(x) { x = x * x; return x; } let y = 10; let result = square(y); console.log(result); // 100 console.log(y); // 10 -- no change

Code language: JavaScript (javascript)

Cách tập lệnh hoạt động.

Đầu tiên, xác định hàm square() chấp nhận đối số x. Hàm gán bình phương của x cho đối số x.x. The function assigns the square of x to the x argument.

Tiếp theo, khai báo biến

function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
2 và khởi tạo giá trị của nó thành
function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
3:
function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
2
and initialize its value to
function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
3:

Sau đó, chuyển biến

function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
2 & nbsp; vào hàm square(). Khi chuyển biến ________ 12 & nbsp; cho hàm square(), JavaScript sao chép ________ 12 & nbsp; giá trị cho biến x.

Hướng dẫn passing variables between functions javascript - truyền biến giữa các hàm javascript

Sau đó, hàm square() thay đổi biến x. Tuy nhiên, nó không ảnh hưởng đến giá trị của biến

function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
2 vì x
function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
2 là các biến riêng biệt.x variable. However, it does not impact the value of the
function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
2 variable because x and
function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
2 are separate variables.

Cuối cùng, & nbsp; giá trị của biến

function a() {
   var str = "first";
   b(str);
}

function b(s) {
   var concat = s + " second";
   //do something with concat here...
}
2 không thay đổi sau khi hàm square() hoàn thành.

Nếu JavaScript đã sử dụng & nbsp; từng tham chiếu, biến ________ 12 & nbsp; sẽ thay đổi thành

var str;
function a(){
  str="first";
}
function b(){
  var something = str +" second"; //new is reserved, use another variable name
}
8 sau khi gọi hàm.

Qua giá trị của & nbsp; giá trị tham chiếu

Nó không rõ ràng để thấy rằng các giá trị tham chiếu cũng được truyền bởi các giá trị. Ví dụ:

let person = { name: 'John', age: 25, }; function increaseAge(obj) { obj.age += 1; } increaseAge(person); console.log(person);

Code language: JavaScript (javascript)

Kịch bản hoạt động như thế nào:

Đầu tiên, xác định biến

var str;
function a(){
  str="first";
}
function b(){
  var something = str +" second"; //new is reserved, use another variable name
}
9 tham chiếu một đối tượng có hai thuộc tính
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
0 và
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
1:

Tiếp theo, xác định hàm

 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
2 chấp nhận một đối tượng
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
3 và tăng thuộc tính
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
1 của đối số
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
3 lên một.

Sau đó, chuyển đối tượng

var str;
function a(){
  str="first";
}
function b(){
  var something = str +" second"; //new is reserved, use another variable name
}
9 cho hàm
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
2:

Trong nội bộ, công cụ JavaScript tạo tham chiếu

 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
3 và làm cho tham chiếu biến này cùng một đối tượng mà các tham chiếu biến
var str;
function a(){
  str="first";
}
function b(){
  var something = str +" second"; //new is reserved, use another variable name
}
9.

Sau đó, tăng thuộc tính

 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
1 lên một bên trong hàm
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
2 thông qua biến
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
3

Cuối cùng, truy cập đối tượng thông qua tham chiếu

var str;
function a(){
  str="first";
}
function b(){
  var something = str +" second"; //new is reserved, use another variable name
}
9:

Có vẻ như JavaScript chuyển một đối tượng bằng cách tham chiếu vì sự thay đổi đối với đối tượng được phản ánh bên ngoài hàm. Tuy nhiên, & nbsp; đây không phải là trường hợp.

Trong thực tế, khi chuyển một đối tượng cho một hàm, bạn đang chuyển tham chiếu của đối tượng đó chứ không phải đối tượng thực tế. Do đó, hàm có thể sửa đổi các thuộc tính của đối tượng thông qua tham chiếu của nó.

Tuy nhiên, bạn không thể thay đổi tham chiếu được truyền vào hàm. Ví dụ:

let person = { name: 'John', age: 25, }; function increaseAge(obj) { obj.age += 1; // reference another object obj = { name: 'Jane', age: 22 }; } increaseAge(person); console.log(person);

Code language: JavaScript (javascript)

Output:

{ name: 'John', age: 26 }

Code language: CSS (css)

Trong ví dụ này, hàm

function square(x) { x = x * x; return x; } let y = 10; let result = square(y); console.log(result); // 100 console.log(y); // 10 -- no change

Code language: JavaScript (javascript)
4 thay đổi thuộc tính
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
1 thông qua đối số
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
3:

và làm cho tham chiếu

 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
3 Một đối tượng khác:

Tuy nhiên, tham chiếu

var str;
function a(){
  str="first";
}
function b(){
  var something = str +" second"; //new is reserved, use another variable name
}
9 vẫn đề cập đến đối tượng gốc có thuộc tính
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
1 thay đổi thành

let person = { name: 'John', age: 25, }; function increaseAge(obj) { obj.age += 1; } increaseAge(person); console.log(person);

Code language: JavaScript (javascript)
0. Nói cách khác, hàm
 function a(){
 let str = "first";
 localStorage.setItem('value1', `${str}`);}

 function b(){
 let str = localStorage.getItem('value1');
 let new = str + " second";}
2 không thay đổi tham chiếu
var str;
function a(){
  str="first";
}
function b(){
  var something = str +" second"; //new is reserved, use another variable name
}
9.

Nếu khái niệm này vẫn làm bạn bối rối, bạn có thể coi các đối số chức năng là các biến cục bộ.

Bản tóm tắt

  • JavaScript chuyển tất cả các đối số cho một hàm theo các giá trị.
  • Đối số chức năng là các biến cục bộ trong JavaScript.

Hướng dẫn này có hữu ích không?

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

Nói cách khác, những thay đổi được thực hiện đối với các đối số không được phản ánh bên ngoài hàm. Nếu các đối số chức năng được truyền bằng tham chiếu, các thay đổi của các biến mà bạn chuyển vào hàm sẽ được phản ánh bên ngoài hàm. Điều này là không thể trong JavaScript.This is not possible in JavaScript.

Chúng ta có thể chuyển các biến cho các chức năng không?

Gọi theo giá trị ở đây Các giá trị của các biến được truyền bởi hàm gọi cho hàm được gọi. Nếu bất kỳ giá trị nào của tham số trong hàm được gọi phải được sửa đổi, thay đổi sẽ chỉ được phản ánh trong hàm được gọi.the values of the variables are passed by the calling function to the called function. If any value of the parameter in the called function has to be modified the change will be reflected only in the called function.

Làm thế nào các tham số được truyền đến các chức năng trong JavaScript?

Các tham số về cơ bản được truyền đến các hàm theo giá trị - vì vậy nếu mã trong phần thân của hàm gán một giá trị hoàn toàn mới cho một tham số được truyền cho hàm, sự thay đổi không được phản ánh trên toàn cầu hoặc trong mã được gọi là hàm đó.by value — so if the code within the body of a function assigns a completely new value to a parameter that was passed to the function, the change is not reflected globally or in the code which called that function.

Chúng ta có thể chuyển các chức năng như tham số cho các chức năng khác trong JavaScript không?

Các chức năng trong mô hình lập trình chức năng có thể được chuyển cho các chức năng khác dưới dạng tham số.Các chức năng này được gọi là gọi lại.Các hàm gọi lại có thể được truyền dưới dạng đối số bằng cách truyền trực tiếp tên của hàm và không liên quan đến chúng.. These functions are called callbacks. Callback functions can be passed as arguments by directly passing the function's name and not involving them.