在JavaScript编程中我们用的很多的一个场景就是写模块。可以看成一个简单的封装或者是一个类库的开始,有哪些形式呢,先来一个简单的模块。
简单模块
var foo = (function() { var name = "foo"; function hello() { console.log("hello "+name); } function doWork() { console.log("do work"); } return { hello: hello, doWork: doWork }; })(); foo.hello(); // hello foo foo.doWork(); // do work
用IIFE创建一个闭包,隔离作用域,避免变量相互干扰。得到foo对象可以直接用了。这种适合小的模块,比如在ag中的写Service。
(function () { angular .module('readApp') .service('authentication', authentication); authentication.$inject = ['$window','$http']; function authentication($window, $http) { var saveToken = function (token) { $window.localStorage['read-token'] = token; }; var getToken = function () { return $window.localStorage['read-token']; }; var register = function(user) { return $http.post('/api/register', user).success(function(data) { saveToken(data.token); }); }; var login = function(user) { return $http.post('/api/login', user).success(function(data) { saveToken(data.token); }); }; var logout = function() { $window.localStorage.removeItem('read-token'); }; var isLoggedIn = function() { var token = getToken(); if (token) { var payload = JSON.parse($window.atob(token.split('.')[1])); return payload.exp > Date.now() / 1000; } else { return false; } }; var currentUser = function() { if (isLoggedIn()) { var token = getToken(); var payload = JSON.parse($window.atob(token.split('.')[1])); return { email: payload.email, name: payload.name, }; } }; return { saveToken: saveToken, getToken: getToken, register: register, login: login, logout: logout, isLoggedIn: isLoggedIn, currentUser: currentUser, }; } })();