2015-07-15 14 views
5

Một trong các tính năng được giới thiệu bởi ECMAScript 6 là khả năng chỉ ra giá trị mặc định cho các tham số không xác định trong JavaScript, ví dụ:Tự động tạo hàm có tham số mặc định trong JavaScript

function foo(a = 2, b = 3) { 
    return a * b; 
} 

console.log(foo()); // 6 
console.log(foo(5)); // 15 

Bây giờ tôi đang tự hỏi nếu nó có thể sử dụng các thông số mặc định cũng cho các chức năng tạo động với các nhà xây dựng Function, như thế này:

new Function('a = 2', 'b = 3', 'return a * b;'); 

Firefox 39 dường như đã hỗ trợ các thông số mặc định (see here) , nhưng dòng ở trên bị từ chối dưới dạng lỗi cú pháp.

+0

Hmmm, tại sao bạn cần một đối số chuỗi thay vì chỉ 'một = 2'? Nó sẽ hơi khó sử dụng hơn, phải không? –

+1

Điều này có vẻ liên quan đến [this] (https://bugzilla.mozilla.org/show_bug.cgi?id=755821) bug. – DavidDomain

Trả lời

0

Như new Function là một hình thức eval anyway bạn có thể sử dụng đoạn mã sau cho nhiệm vụ đó:

eval('function bar (a = 2, b = 3) { return a * b; }'); 
+0

Chăm sóc để giải thích downvote @anonymous? – Dodekeract

+0

Có lẽ vì nó là một khai báo hàm, nên 'eval' sẽ trả về không xác định. Thay vào đó, bạn nên sử dụng biểu thức hàm. – Oriol

0

Tôi không biết nếu đó là nghĩa vụ phải làm việc - một số ai khác sẽ phải nói với bạn - nhưng nếu nó tiếp tục là một vấn đề, tại sao không sử dụng eval()?

Something trong những dòng về vấn đề này nên quy phạm pháp luật:

var fct1 = eval("(function foo(a = 2, b = 3) { return a * b; })") 
1

Bây giờ tôi đang tự hỏi nếu nó có thể sử dụng các thông số mặc định cũng cho các chức năng tạo động với các nhà xây dựng Chức năng

Có, theo số the spec điều này là có thể. Các đối số tham số được ghép nối như thường lệ và sau đó phân tích cú pháp theo sản xuất FormalParameters, bao gồm các giá trị mặc định.

Firefox 39 dường như đã hỗ trợ các tham số mặc định, nhưng dòng ở trên bị từ chối dưới dạng lỗi cú pháp.

Vâng, đó là một :-) lỗi (có thể là this one)
Bạn sẽ có thể làm việc xung quanh nó bằng cách sử dụng

var fn = Function('return function(a = 2, b = 3) { return a * b; }')(); 
Các vấn đề liên quan