Gọi hàm với mảng đối số javascript

Khi bạn chuyển một mảng vào một hàm trong JavaScript, nó sẽ được chuyển dưới dạng tham chiếu. Bất cứ điều gì bạn làm thay đổi mảng bên trong hàm cũng sẽ thay đổi mảng ban đầu. ví dụ: mã này sẽ ghi [1, 2, 3] vào bảng điều khiển

var array = [1, 2, 3, 4];const mutate = arr => {
arr.pop[];
return arr;
}
mutate[array];console.log[array]; // result [1, 2, 3]

sao chép mảng đã truyền vào một mảng mới và thực hiện tất cả quá trình xử lý của bạn trên mảng mới không giúp được gì

var array = [1, 2, 3, 4];const mutate = arr => {
var newArr = arr;
newArr.pop[];
return newArr;
}
mutate[array];console.log[array]; // result [1, 2, 3] - Still mutated!

Điều này xảy ra vì var newArr = arr; . Tất cả điều này làm là trỏ một biến mới vào cùng một mảng

Bạn có thể sử dụng Mảng. từ

var newArr = Array.from[arr];

hoặc lát[]

var newArr = arr.slice[];

để sao chép mảng được truyền vào hàm thành một mảng mới. Hơn bạn có thể thay đổi mảng mới mà không làm thay đổi mảng ban đầu

… Cách khác …

Tôi đã xem định nghĩa của các tham số còn lại và các toán tử trải rộng sáng nay và tôi chợt nhận ra rằng có một cách khác để truyền một mảng dưới dạng một giá trị thay vì một tham chiếu

Tham số còn lại cho phép chúng ta biểu diễn số lượng đối số không xác định dưới dạng một mảng. Khi bạn định nghĩa một hàm bằng tham số còn lại, các đối số của hàm, bất kể chúng là bao nhiêu, sẽ được chuyển thành một mảng

toán tử trải rộng cho phép một iterable, giống như một mảng, được mở rộng tại chỗ. Nếu bạn sử dụng toán tử trải rộng để chuyển một mảng vào lệnh gọi hàm, hàm sẽ nhận các giá trị riêng lẻ của mảng làm đối số

Nếu chúng ta kết hợp hai khái niệm này, bằng cách xác định hàm của chúng ta với tham số còn lại và gọi hàm bằng toán tử trải rộng, chúng ta có thể thực hiện các thao tác trên mảng với hàm mà không làm thay đổi mảng ban đầu

var array = [1, 2, 3, 4];// use rest parameter in function definition
// to turn passed values into array
const noMutate = […arr] => {
arr.pop[];
return arr;
}
// use spread operator in function call to
// turn array elements into function arguments
noMutate[…array];
console.log[array]; // result [1, 2, 3, 4]
Bỏ qua các đối số khác

Bạn có thể chuyển các đối số khác với tham số còn lại miễn là chúng xuất hiện trước tham số còn lại. Ví dụ: bạn có thể triển khai phiên bản hàm lọc của riêng mình để nhân mọi phần tử của một mảng với một số khác như thế này

var arr = [1, 2, 3, 4];const noMutate = [num, …arr] => {
var multiple = []
for[elem of arr] multiple.push[elem * num];
return multiple;
}
var double = noMutate[2, …arr];console.log[double]; // returns [2, 4, 6, 8]
console.log[arr]; // not mutated: [1, 2, 3, 4]

Bạn thậm chí có thể sử dụng toán tử trải rộng để chuyển vào các thuộc tính của một đối tượng JavaScript như thế này

var obj = {
arr: [1, 2, 3, 4]
};
const noMutate = [num, …arr] => {
console.log[arr];
var multiple = []
for[elem of arr] multiple.push[elem * num];
return multiple;
}
var double = noMutate[2, …obj.arr];console.log[double]; // returns [2, 4, 6, 8]
console.log[arr]; // not mutated: [1, 2, 3, 4]

Hiệu suất khôn ngoan, tôi không chắc điều này so với việc sử dụng Array như thế nào. từ [] hoặc. slice[], nhưng nó loại bỏ một dòng mã và tôi nghĩ nó làm cho mã của bạn trông gọn gàng hơn. Nếu có ai biết điều này ảnh hưởng đến hiệu suất như thế nào, vui lòng cho tôi biết

Nếu một hàm được gọi với các đối số bị thiếu [ít hơn so với khai báo], các giá trị bị thiếu được đặt thành undefined

Đôi khi điều này có thể chấp nhận được, nhưng đôi khi tốt hơn là gán giá trị mặc định cho tham số

Giá trị tham số mặc định

ES6 cho phép các tham số chức năng có giá trị mặc định

Thí dụ

Nếu y không được thông qua hoặc không xác định, thì y = 10

function myFunction[x, y = 10] {
  return x + y;
}
myFunction[

Tự mình thử »

Thông số phần còn lại chức năng

Tham số còn lại [. ] cho phép một hàm coi số lượng đối số không xác định là một mảng

Thí dụ

hàm tổng[. args] {
  let sum = 0;
  for [let args of args] sum += arg;
  return sum;
}

đặt x = tổng[4, 9, 16, 25, 29, 100, 66, 77];

Tự mình thử »

Đối tượng đối số

Các hàm JavaScript có một đối tượng tích hợp được gọi là đối tượng đối số

Đối tượng đối số chứa một mảng các đối số được sử dụng khi hàm được gọi [gọi]

Bằng cách này, bạn có thể chỉ cần sử dụng một hàm để tìm [ví dụ] giá trị cao nhất trong danh sách các số

Thí dụ

x = findMax[1, 123, 500, 115, 44, 88];

function findMax[] {
  let max = -Infinity;
  for [let i = 0; i < đối số. chiều dài;
    if [arguments[i] > max] {
      max = arguments[i];
    }
  }
  return max;
}

Tự mình thử »

Hoặc tạo một hàm để tính tổng tất cả các giá trị đầu vào

Thí dụ

x = sumAll[1, 123, 500, 115, 44, 88];

function sumAll[] {
  let sum = 0;
  for [let i = 0; i < đối số. chiều dài;
    sum += arguments[i];
  }
  return sum;
}

Tự mình thử »

Nếu một hàm được gọi với quá nhiều đối số [nhiều hơn so với khai báo], những đối số này có thể được truy cập bằng cách sử dụng đối tượng đối số

Các đối số được truyền theo giá trị

Tham số, trong lời gọi hàm, là đối số của hàm

Các đối số JavaScript được truyền theo giá trị. Hàm chỉ biết các giá trị, không biết vị trí của đối số

Làm cách nào để gọi một hàm có mảng làm đối số trong JavaScript?

Phương pháp 1. Sử dụng phương thức apply[] . Phương thức apply[] được sử dụng để gọi một hàm với các đối số đã cho là một mảng hoặc đối tượng giống như mảng. Nó chứa hai tham số. Giá trị này cung cấp lời gọi hàm và mảng đối số chứa mảng đối số được truyền.

Một hàm có thể lấy một mảng làm đối số JavaScript không?

Như vậy, Javascript cung cấp cho chúng ta hai cách để sử dụng mảng làm tham số hàm trong Javascript - apply[] và toán tử trải rộng .

Hàm có thể lấy một mảng làm đối số không?

Không thể truyền toàn bộ mảng làm đối số cho một hàm trong C++ . Tuy nhiên, bạn có thể chuyển một con trỏ tới một mảng không có chỉ mục bằng cách chỉ định tên của mảng. Trong C, khi chúng ta truyền một mảng cho một hàm fun[], nó luôn được coi là một con trỏ bởi fun[].

Làm cách nào để chuyển nhiều đối số trong hàm JavaScript?

Khi bạn gọi một hàm trong JavaScript, bạn có thể chuyển vào bất kỳ số lượng đối số nào, bất kể khai báo hàm chỉ định điều gì . Không có giới hạn tham số chức năng. Trong hàm trên, nếu chúng ta truyền vào bao nhiêu đối số thì kết quả luôn giống nhau vì nó chỉ nhận 2 tham số đầu tiên.

Chủ Đề