2013-04-29 22 views
8

Có cách nào để bí danh function nhà điều hành mà không có quá nhiều chi phí như eval? Tôi muốn viếtToán tử chức năng có thể được đặt bí danh không?

fn test() { ... } 

thay vì

function test() { ... } 

dải số byte trong mã được rút gọn. Chỉ tò mò thôi.

+1

Không. 'function' phải được viết ra. –

+11

Tại sao? Nó đã được gzipped, phải không? Vì vậy, nó sẽ nén xuống về cơ bản không có gì anyway. Chất thải tối ưu hóa. –

+2

@DaveNewton: Bạn không thể nói điều tương tự về javascript chưa được biên dịch? –

Trả lời

5

Có cách nào để toán tử hàm hoạt động mà không có quá nhiều chi phí không?

Không.

Trừ khi tất nhiên bạn đang sử dụng ECMAScript 6 được cho là sẽ chứa những gì được gọi là "fat arrow" syntax:

var test = (arg1, arg2) => arg1 + arg2; 

Cho đến lúc đó, bạn đang mắc kẹt liên tục tuyên bố:

var test = function (arg1, arg2) { return arg1 + arg2 }; 

hoặc

function test(arg1, arg2) { 
    return arg1 + arg2; 
} 
+1

Có sẵn ngay hôm nay nếu bạn đang sử dụng TypeScript :) –

+4

@MortenMertner: Nhưng nó đã biên dịch thành JavaScript và giờ chúng tôi trở lại nơi chúng tôi bắt đầu. –

+1

@RocketHazmat Vâng, tất nhiên rồi. Không giúp đỡ người đăng ngay bây giờ, nhưng sẽ cho phép anh ta viết mã của mình ngay bây giờ theo cách sẽ chiếm ít không gian hơn trong tương lai (một khi nó trở thành khả thi để nhắm mục tiêu ES6 trực tiếp). –

2

Như Dave đã chỉ ra, tốt nhất là viết kịch bản phù hợp và để cho gzip làm công việc của nó.

Tuy nhiên, nếu bạn không sợ eval() và bị người khác nhìn xuống, nhưng bạn có thể tạo bộ tiền xử lý để tùy chỉnh ngôn ngữ một chút - một chức năng có thể bật khai báo =>.

Trong một số tập tin bên ngoài hoặc thẻ ẩn mà cần tiền xử lý:

f=(x,y)=>{return x+y;} 

Trong Preprocessor của bạn ở đâu đó:

var s = loadCodeToPreprocess(whatever); 
s = s.replace(/(\([^()]*\))=>/g, "function$1"); 
eval(s); 

Nhưng một lần nữa, nó thường là tốt nhất để chỉ cần viết JavaScript theo tiêu chuẩn và cho phép gzip thực hiện công việc của mình.

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