Tuyên bố chức năng
Một hàm được tạo bằng một khai báo hàm là một đối tượng Hàm và có tất cả các thuộc tính, phương thức và hành vi của các đối tượng Hàm. Ví dụ:
function statement(item){
console.log('Function statement example '+ item);
}
Biểu thức hàm
Biểu thức hàm tương tự như câu lệnh hàm ngoại trừ tên hàm có thể được bỏ qua để tạo hàm ẩn danh. Ví dụ:
var expression = function (item){
console.log('Function expression example '+ item);
}
Ngay sau khi chức năng được tạo, nó sẽ tự gọi không cần phải gọi rõ ràng. Trong ví dụ dưới đây, biến iife sẽ lưu trữ một chuỗi được trả về khi thực thi hàm.
var iife = function (){
return 'Immediately Invoked Function Expressions(IIFEs) example ';
}();
console.log(iife); // 'Immediately Invoked Function Expressions(IIFEs) example '
Câu lệnh trước IIFE phải luôn kết thúc bằng dấu ; hoặc nó sẽ ném một lỗi.
Ví dụ tồi:
var x = 2 //no semicolon, will throw error
(function(y){
return x;
})(x); //Uncaught TypeError: 2 is not a function
(function(value){
var greet="Hello";
console.log(greet+ ' ' + value);
})('IIFEs');
Trong ví dụ trên khi công cụ javascript thực thi đoạn mã trên, nó sẽ tạo ngữ cảnh thực thi toàn cầu khi nó nhìn thấy mã và tạo đối tượng hàm trong bộ nhớ cho IIFE. Và khi nó đạt được trên đường dây 46
do chức năng nào được gọi, một bối cảnh thực thi mới được tạo ra một cách nhanh chóng và do đó, biến hello đi vào bối cảnh thực thi chức năng đó chứ không phải vào toàn cầu, đây là điều làm cho nó trở nên độc đáo. This ensures that code inside IIFE does not interfere with other code or be interfered by another code
và vì vậy mã là an toàn.