Bắt đầu nội dung chính
JavaScript luôn luôn qua giá trị. Điều này có nghĩa là mọi thứ trong JavaScript là một loại giá trị và các đối số chức năng luôn được truyền bởi giá trị. Điều đó đang được nói, các loại đối tượng khó hiểu hơn một chút.
Sự nhầm lẫn nằm ở thực tế là các loại đối tượng là các loại tham chiếu được truyền theo giá trị. Thật kỳ lạ như âm thanh này, một tham chiếu đến một đối tượng được truyền đến một hàm theo giá trị. Sự khác biệt tinh tế ở đây nằm ở chỗ một tham chiếu đối tượng được truyền theo giá trị không giống như truyền một đối tượng bằng tham chiếu.
Nói một cách đơn giản, các thay đổi đối với đối tượng bên trong hàm sẽ ảnh hưởng đến đối tượng gốc, vì cả hai đều đề cập đến cùng một đối tượng. Tuy nhiên, việc chỉ định lại giá trị của biến giữ đối tượng ban đầu sẽ không ảnh hưởng đến đối tượng được tham chiếu bởi hàm. Hãy để tôi chứng minh điều này bằng một ví dụ:
let myObj = { a: 1 }; const myFunc = obj => { obj.a++; return obj; } let otherObj = myFunc[myObj]; myObj; otherObj; myObj === otherObj; myObj = { a: 4, b: 0 }; myObj; otherObj; myObj === otherObj;
Trong ví dụ này, myObj
là một đối tượng JavaScript đơn giản, được truyền như một đối số cho myFunc
. Đối số obj
bên trong myFunc
là một tham chiếu đến cùng một đối tượng, myObj
. Bất kỳ thay đổi nào được thực hiện đối với obj
đều ảnh hưởng đến myObj
, vì chúng là cùng một đối tượng. Điều này có nghĩa là việc gán kết quả [obj
] của lệnh gọi chức năng cho một biến khác,
function callByValue[varOne, varTwo] {1, sẽ chuyển cùng một tham chiếu cho biến. Kết quả là cả
console.log["Inside Call by Value Method"];
varOne = 100;
varTwo = 200;
console.log["varOne =" + varOne +"varTwo =" +varTwo];
} let varOne = 10;
let varTwo = 20; console.log["Before Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo]; callByValue[varOne, varTwo] console.log["After Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo];
output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
myObj
và function callByValue[varOne, varTwo] {1 tham chiếu cùng một giá trị đối tượng.
console.log["Inside Call by Value Method"];
varOne = 100;
varTwo = 200;
console.log["varOne =" + varOne +"varTwo =" +varTwo];
} let varOne = 10;
let varTwo = 20; console.log["Before Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo]; callByValue[varOne, varTwo] console.log["After Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo];
output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
Việc xác định lại myObj
cho một giá trị đối tượng mới hoàn toàn không ảnh hưởng đến
function callByValue[varOne, varTwo] {1.
console.log["Inside Call by Value Method"];
varOne = 100;
varTwo = 200;
console.log["varOne =" + varOne +"varTwo =" +varTwo];
} let varOne = 10;
let varTwo = 20; console.log["Before Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo]; callByValue[varOne, varTwo] console.log["After Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo];
output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
function callByValue[varOne, varTwo] {1 vẫn tham khảo đối tượng ban đầu. Nếu JavaScript được tham chiếu từng lần, việc chỉ định lại
console.log["Inside Call by Value Method"];
varOne = 100;
varTwo = 200;
console.log["varOne =" + varOne +"varTwo =" +varTwo];
} let varOne = 10;
let varTwo = 20; console.log["Before Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo]; callByValue[varOne, varTwo] console.log["After Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo];
output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
myObj
sẽ ảnh hưởng đến function callByValue[varOne, varTwo] {1, điều này rõ ràng không phải là trường hợp.
console.log["Inside Call by Value Method"];
varOne = 100;
varTwo = 200;
console.log["varOne =" + varOne +"varTwo =" +varTwo];
} let varOne = 10;
let varTwo = 20; console.log["Before Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo]; callByValue[varOne, varTwo] console.log["After Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo];
output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
Đoạn trích và bộ sưu tập được đề xuất
Chuẩn bị cho cuộc phỏng vấn JavaScript tiếp theo của bạn với bộ sưu tập các câu hỏi và câu trả lời phỏng vấn này.
Từ khóa
function callByValue[varOne, varTwo] {
9 của JavaScript là một nguồn gây nhầm lẫn cho nhiều người mới bắt đầu và cựu chiến binh. Tìm hiểu cách nó hoạt động trong các kịch bản khác nhau và bắt đầu sử dụng nó một cách chính xác.
console.log["Inside Call by Value Method"];
varOne = 100;
varTwo = 200;
console.log["varOne =" + varOne +"varTwo =" +varTwo];
} let varOne = 10;
let varTwo = 20; console.log["Before Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo]; callByValue[varOne, varTwo] console.log["After Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo];
output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20Tạo một chức năng gọi phương thức tại một khóa nhất định của một đối tượng, tùy chọn chi tiêu bất kỳ tham số được cung cấp bổ sung nào cho các đối số.
Tạo một chức năng gọi
function callByReference[varObj] {
0 với một bối cảnh nhất định, tùy chọn chi tiêu bất kỳ tham số được cung cấp bổ sung nào cho các đối số.
console.log["Inside Call by Reference Method"];
varObj.a = 100;
console.log[varObj];
}
let varObj = {a:1};console.log["Before Call by Reference Method"];
console.log[varObj];callByReference[varObj] console.log["After Call by Reference Method"];
console.log[varObj];output will be :
--------------- Before Call by Reference Method
{a: 1}
Inside Call by Reference Method
{a: 100}
After Call by Reference Method
{a: 100}
Trong bài đăng này, chúng tôi sẽ xem xét vượt qua giá trị và vượt qua tham chiếu trong JavaScript.
Hãy cùng xem những gì được truyền qua giá trị và vượt qua tham chiếu trước khi xem xét bối cảnh JavaScript của nó.
Vượt qua giá trị:
Trong Pass by 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ố. Thay đổi đối số bên trong hàm không ảnh hưởng đến biến được truyền từ bên ngoài hàm.
JavaScript luôn vượt qua giá trị để thay đổi giá trị của biến không bao giờ thay đổi nguyên thủy cơ bản [chuỗi hoặc số]. so changing the value of the variable never changes the underlying primitive [String or number].
function callByValue[varOne, varTwo] {
console.log["Inside Call by Value Method"];
varOne = 100;
varTwo = 200;
console.log["varOne =" + varOne +"varTwo =" +varTwo];
} let varOne = 10;
let varTwo = 20; console.log["Before Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo]; callByValue[varOne, varTwo] console.log["After Call by Value Method"];
console.log["varOne =" + varOne +"varTwo =" +varTwo];
output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
Tuy nhiên, khi một biến đề cập đến một đối tượng bao gồm mảng, giá trị là tham chiếu đến đối tượng.
Vượt qua tham chiếu:
Trong tham chiếu vượt qua, hàm được gọi bằng cách truyền trực tiếp tham chiếu/địa chỉ của biến làm đối số. Thay đổi đối số bên trong hàm ảnh hưởng đến biến được truyền từ bên ngoài hàm. Trong các đối tượng và mảng JavaScript theo sau vượt qua tham chiếu.
function callByReference[varObj] {
console.log["Inside Call by Reference Method"];
varObj.a = 100;
console.log[varObj];
}
let varObj = {a:1};console.log["Before Call by Reference Method"];
console.log[varObj];callByReference[varObj] console.log["After Call by Reference Method"];
console.log[varObj];output will be :
--------------- Before Call by Reference Method
{a: 1}
Inside Call by Reference Method
{a: 100}
After Call by Reference Method
{a: 100}
Vì vậy, nếu chúng ta chuyển đối tượng hoặc mảng làm đối số cho phương thức, thì có khả năng giá trị của đối tượng có thể thay đổi.
Nếu bạn muốn tạo trang web hoặc cổng thông tin - liên hệ với chúng tôi @ //www.bondesk.in