2012-03-09 32 views
5

Tôi có chuỗi định nghĩa hàm ẩn danh ẩn danh, nhưng làm cách nào tôi có thể gọi hàm này. Cho phép nói chức năng giống như vậy:Cách gọi chức năng ẩn danh từ chuỗi

var fn_str = "function(){ alert('called'); }"; 

Đã đánh giá, nhưng có lỗi mà chức năng phải có tên.

eval(fn_str).apply(this); // SyntaxError: function statement requires a name 
+0

Bạn gọi 'eval' với 'a' trong khi chuỗi hàm nằm trong 'fn_str'. không hoạt động theo cách này ... – gdoron

+0

Xin lỗi, tôi đã sử dụng bảng điều khiển firebug cho độ ngắn nhưng quên thay đổi điều này, mắt tốt mặc dù – Kristian

Trả lời

5

Bạn có thể sử dụng Ngay Được triệu gọi hàm Biểu:

var fn_str = "function(){ alert('called'); }"; 
eval('(' + fn_str +')();'); 

Immediately Invoked Function Expression

Một cách khác là sử dụng để a Function đối tượng (Nếu bạn có chuỗi chức năng cơ thể):

var func = new Function("alert('called')"); 
func.apply(this); 
+1

Đã tìm ra, nhưng cảm ơn! Chấp nhận/+ 1 để phản hồi nhanh :) – Kristian

1

Tìm thấy giải pháp: Đặt chức năng trong ngoặc

var a = "(function(){ alert('called'); })"; 
eval(a).apply(this); 
+1

Bạn không cần phải viết sử dụng 'apply' bạn có thể sử dụng * Biểu thức hàm được gọi ngay lập tức ** như tôi đã trả lời. – gdoron

+0

Tôi biết rằng cú pháp, nhưng tôi không thể vượt qua một đối tượng như một tham số theo cách đó (không phân tích cú pháp một đối tượng thành chuỗi). Hoặc tôi có thể? – Kristian

+0

Ý của bạn là gì trong bình luận đó, tôi không hiểu nó. Bạn cần gì? – gdoron

Các vấn đề liên quan