new Function
สร้างฟังก์ชันที่สามารถใช้ซ้ำได้ eval
เพียงแค่รันสตริงที่กำหนดและส่งกลับผลลัพธ์ของคำสั่งสุดท้าย คำถามของคุณเข้าใจผิดในขณะที่คุณพยายามสร้างฟังก์ชัน Wrapper ที่ใช้ฟังก์ชันเพื่อเลียนแบบ eval
เป็นความจริงที่พวกเขาแบ่งปันรหัสหลังม่าน? ใช่มีโอกาสมาก รหัสเดียวกันหรือไม่ ไม่อย่างแน่นอน
เพื่อความสนุกสนานนี่คือการใช้งานที่ไม่สมบูรณ์ของฉันเองโดยใช้ eval เพื่อสร้างฟังก์ชัน หวังว่ามันจะทำให้เกิดความแตกต่าง!
function makeFunction() {
var params = [];
for (var i = 0; i < arguments.length - 1; i++) {
params.push(arguments[i]);
}
var code = arguments[arguments.length - 1];
return eval('[function (' + params.join(',')+ '){' + code + '}][0]');
}
ความแตกต่างที่ใหญ่ที่สุดระหว่างฟังก์ชันนี้กับฟังก์ชันใหม่คือฟังก์ชันไม่ได้กำหนดขอบเขตคำศัพท์ ดังนั้นมันจะไม่สามารถเข้าถึงตัวแปรการปิดและของฉันได้