Search engines are used very differently from how they were just ten years ago. Search products have had a rich and vibrant diversity in terms of features, use cases, evolution and audience. There is more data to be sorted through, and greater expectation to get to the most relevant data points faster. User behaviour is gradually shifting away from sorting through several search results manually to get to the information they need, to getting answers up front along with references. Evolution A very good summary of search engines and their evolution is presented by Vaibhav Saini, Co Founder at Signy: https://hackernoon.com/evolution-of-search-engines-how-will-search-engines-look-like-after-10-years-8996321e93d . We see how we started with search engines focused on index based text searching to search engines recently incorporating more advanced search metaphors, including image search, relevance measures such as back links and popularity, voice input and even AR. Learning user intent T
Closures in Javascript are not just an additional feature, they're inherent to the language. Every time a function is created, it's lexical scope is automatically captured in it's current state along with the function. It can quickly get complex when using reactive paradigms, such as with frameworks like Vue , as happened with me today. Here's the code: async setSwaggerClient({ state, commit, rootState}) { ... let authToken = rootState.user.key; Swagger( '/api/swagger.json', { requestInterceptor: (req) => { req.headers["X-CSRFToken"] = g_csrftoken; if(authToken !== null) { req.headers["Authorization"] = `Token ${authToken}`; } return req; } } ) ... } The function setSwaggerClient is a Vuex action that creates and sets the swagger client in a Vuex store. During creation I pass a functi