new Function
tạo ra một chức năng có thể được sử dụng lại. eval
chỉ thực hiện chuỗi đã cho và trả về kết quả của câu lệnh cuối cùng. Câu hỏi của bạn bị hiểu sai khi bạn cố gắng tạo một hàm trình bao bọc sử dụng Hàm để mô phỏng một đánh giá.
Có đúng là họ chia sẻ một số mã đằng sau rèm cửa? Có, rất có thể. Chính xác là cùng một mã? Không, chắc chắn.
Nói cho vui, đây là cách triển khai không hoàn hảo của riêng tôi bằng cách sử dụng eval để tạo một hàm. Hy vọng nó sẽ làm sáng tỏ sự khác biệt!
function makeFunction() {
var params = [];
for (var i = 0; i < arguments.length - 1; i++) {
params.push(arguments[i]);
}
var code = arguments[arguments.length - 1];
// Creates the anonymous function to be returned
// The following line doesn't work in IE
// return eval('(function (' + params.join(',')+ '){' + code + '})');
// This does though
return eval('[function (' + params.join(',')+ '){' + code + '}][0]');
}
Sự khác biệt lớn nhất giữa Chức năng này và Chức năng mới là Chức năng không có phạm vi từ vựng. Vì vậy, nó sẽ không có quyền truy cập vào các biến đóng và của tôi thì có.