Hàm trong Javascript

Function nextInLine(arr, item) {
return item; // Change this line
}
var testArr = [1,2,3,4,5];

Ah sao khi khai báo hàm này người ta không khai báo như:
Function nextInLine(arr, item) {
arr = [1,2,3,4,5];
item = ?
return item; // Change this line
}
mà phải khai var testArr = [1,2,3,4,5]; ở dưới vậy.
Như function sum(a,b){
a = 3;
b = 5;
return a+b;} khỏe hơn không

hàm thực chất là một chương trình con. Biến trong hàm thì là cục bố đó là lí do

function add(n) {
	a = 5;
	return n + a;
}

var a = add(5);
//kết quả là 10;

bạn có thể thấy có 2 biến a được khai báo

2 Likes

Bạn ví dụ cũng lờ mờ hiểu ra rồi, cảm ơn rất nhiều!

Hàm giống như là hàm toán học vậy đó.
F(x) = x + 1
Vậy F(2) = 3
Tương tự .

function f(x) {
  let result = x + 1;
  return result;
}

// Khi muốn sử dụng hàm
f(3); // return 4

Mình nghĩ bạn nên đọc cuốn you don’t know JS để hiểu rõ hơn. Bắt đầu học lập trình bằng JS là khó đấy.

2 Likes
Function nextInLine(arr, item) {
	arr = [0, 0, 0];
	item = 1;
	return item;
}

var a = [1, 2, 3];
var b = nextInLine(a, 4);
//kết quả sẽ là 1
//mặc dù bạn truyền vào số 4 nhưng trong hàm bạn đã thay đổi item = 1
//tuy vật mảng a của bạn vẫn sẽ là [1, 2, 3] mặc dù bạn đã thay đổi
//mấu chốt là bạn thay đổi nó ở trong hàm
//khi bạn thay đổi parameter trong một hàm theo kiểu tham tham chiếu (kiểu bạn đang xem là tham chiếu) thì khi bạn viết nó arr = [0, 0, 0]; máy sẽ lập tức tạo một vùng nhớ khác lưu trữ cái arr đó. Coi như dòng đó là một dòng khai báo một biến. Và đương nhiên nó cục bộ. Sau khi kết thúc hàm nó sẽ mất đi. 

//ví dụ thêm
function change(a) {
	a = 5;
}

var a = 3;
change(a);
//a vẫn sẽ là 3
//vì a trong hàm là một a khác, còn a ở chương trình chính là một a khác
//khi bạn truyền parameter theo kiểu tham chiếu như trên nó chỉ quan tâm một thứ của parameter đó là giá trị. Còn lại quan tâm

//còn trong function này
function nextInLine(arr, item) {
	arr = arr.push(item);
	x = arr.shift();
	return x;
}

//thực chất bạn "Lovemagic" nói là push không được gì theo mình nghĩ là bạn đã hiểu sai. Bạn cũng nghĩ là ở đây là tham chiếu nên nó sẽ không ảnh hưởng gì tới mảng. Nhưng nó vẫn thay đổi. Cái này gọi là gì mình cũng không nhớ rõ lắm. Nhưng nó vẫn sẽ thay đổi.
//Nếu bạn muốn biết thêm thì google với từ khóa "pass by value and pass by reference"
1 Like

Khai báo dưới hay trên của testArr không phải là vấn đề cần bàn ở đây.

a, b chỉ là ký hiệu, thay x,y,z,t tùy người lập trình. Cái cần là khi truyền vào người ta truyền được cả 3,5 cả 2017,8120, thích tính sum của số nào cũng ok.

Khi bạn để a = 3, b = 5 vào trong thân function thì lúc nào cái return a+b chả = 8, thế thì return 8 luôn cho xong.

Cũng tương tự vậy, arr hay aRR hay ArRaY thì cũng chỉ là biến, thích đặt sao thì đặt. Ngoài testArry ra thì còn có testArr1, notATestArry2017, truyền bất cứ array nào vào cái function nextInLine cũng phải trả về được phần tử đầu tiên của mảng.

Như mình đã nói, bạn nên đọc từ đầu đến cuối. Mình không rõ trên FreeCodeCamp dạy sao nhưng hiện tại bạn chưa hiểu gì về function cũng như programing nói chung. Bạn nên chuyển sang python để học thay vì chọn javascript làm ngôn ngữ đầu tiên.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?