cuốn sách gpt4 ai đã làm

Cách thoát khỏi tình trạng ràng buộc trong javascript

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 16:30:02 28 4
mua khóa gpt4 Nike

Tôi cố gắng sử dụng đoạn mã sau để đăng ký cuộc gọi lại trên một loạt nút. Nhưng tôi dường như không hiểu cách liên kết chuỗi cần thiết trong cuộc gọi lại. Mọi đề xuất sẽ được đánh giá rất cao!

for (var i = 0; i < this.car_types.length; ++i) {

this.select_car_buttons.push($("#button_select_car_" +
this.car_types[i].car_type));

this.select_car_buttons[this.select_car_buttons.length - 1]
.click(hàm() {
console.log(this.car_types[i].car_type);
}.bind(this));
}

Bằng cách nào đó,cái này Đối tượng chính là nút chứ không phải đối tượng trong phạm vi mà hàm đang được gọi.

biên tập: dường như đang truyền vào đối tượng này một cách chính xác. Vấn đề là biến Tôi Không nằm ngoài phạm vi, nhưng được ghi lại bằng tham chiếu thay vì giá trị. Tôi nên giải quyết vấn đề này như thế nào?

JavaScript với tư cách là một ngôn ngữ dường như cũng có rất nhiều vấn đề như vậy (ít nhất có thể được phân loại là một vấn đề dựa trên ngữ nghĩa được áp dụng bởi các ngôn ngữ họ C truyền thống như C và C++), có một số vấn đề tôi có thể đọc về không. Bài báo cảnh báo tôi chống lại những loại vấn đề này?

CHỈNH SỬA KHÁC :Trong khi cố gắng sử dụng tính năng ghi lại giá trị Tôi Khi đóng giá trị, tôi đã thử đoạn mã sau

this.select_car_buttons[this.select_car_buttons.length - 1]
.click((hàm(scoped_i) {
hàm trả về() {
console.log(this.car_types[scoped_i].car_type);
}.bind(cái này);
}(Tôi)));

Nhưng tôi gặp lỗi sau trong Safari

TypeError: không xác định không phải là một đối tượng (đánh giá 'scoped_i')

biên tập:Mã tương tự hoạt động trong Firefox và Chrome, nhưng không hoạt động trong Safari!

câu trả lời hay nhất

Đây là một vấn đề phạm vi. Đối với các trình duyệt hiện đại (Hỗ trợ ES6), bạn chỉ cần for Trung tướng của chu kỳ var Thay đổi thành cho phép có thể được sửa chữa.

for (let i = 0; i < this.car_types.length; ++i)

Trích dẫntài liệu MDN

các cho phép câu lệnh khai báo một biến cục bộ trong phạm vi khối, tùy ý khởi tạo nó thành một giá trị.


Để được hỗ trợ toàn cầu hơn (Hỗ trợ không phải ES6), hãy sử dụng hàm được gọi ngay lập tức để tạo thêm phạm vi cho biến (Bạn chuyển nó dưới dạng tham số)

this.select_car_buttons[this.select_car_buttons.length - 1]
.click((function(scoped_i) { // IIF bắt đầu từ đây, biến mới được gọi làscoped_i để thể hiện mức độ chi tiết
return function() { // mã hàm ban đầu của bạn ở đây
console.log(this.car_types[scoped_i].car_type); // sử dụng biến mới được xác định phạm vi
}.bind(cái này);
}.bind(this)(i))); // kết thúc và thực thi IIF trong khi truyền biến i cho nó

Về javascript - làm thế nào để thoát khỏi tình trạng ràng buộc trong javascript, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/36524222/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress