Help
RSS
API
Feed
Maltego
Contact
Domain > blog.waningflow.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2020-08-27
118.31.219.207
(
ClassC
)
2024-10-02
118.31.219.202
(
ClassC
)
Port 80
HTTP/1.1 200 OKServer: AliyunOSSDate: Wed, 02 Oct 2024 22:37:54 GMTContent-Type: text/htmlContent-Length: 13024Connection: keep-aliveVary: Accept-Encodingx-oss-request-id: 66FDCB42E20C8C3231972F89Accept-Ranges: bytesETag: 5D82BACC880F962EF931455FD5CF5F08Last-Modified: Sun, 30 Aug 2020 13:44:47 GMTx-oss-object-type: Normalx-oss-hash-crc64ecma: 952251297704904600x-oss-storage-class: StandardContent-MD5: XYK6zIgPli75MUVf1c9fCAx-oss-server-time: 64 !DOCTYPE html>html langen> head> meta namegenerator contentHugo 0.74.3 /> title>Blog of waningflow/title> meta http-equivcontent-type contenttext/html; charsetutf-8>meta nameviewport contentwidthdevice-width, initial-scale1.0>meta namedescription content/>meta namekeywords content/>meta namerobots contentnoodp/>link relcanonical hrefhttps://blog.waningflow.com/ />link relstylesheet hrefhttps://blog.waningflow.com/css/style.min.css>link relstylesheet hrefhttps://blog.waningflow.com/style.css>link relapple-touch-icon-precomposed sizes144x144 hrefhttps://blog.waningflow.com/img/apple-touch-icon-144-precomposed.png>link relshortcut icon hrefhttps://blog.waningflow.com/img/favicon.png>meta nametwitter:card contentsummary/>meta nametwitter:title contentBlog of waningflow/>meta nametwitter:description content/>meta propertyog:title contentBlog of waningflow />meta propertyog:description content />meta propertyog:type contentwebsite />meta propertyog:url contenthttps://blog.waningflow.com/ />meta propertyog:updated_time content2020-08-30T14:40:00+08:00 />meta propertyog:site_name contentBlog of waningflow />link relalternate typeapplication/rss+xml href/index.xml titleBlog of waningflow /> /head> body classdark-theme> div classcontainer> header classheader> span classheader__inner> a href/ classlogo styletext-decoration: none;> span classlogo__mark>svg xmlnshttp://www.w3.org/2000/svg classgreater-icon viewBox0 0 44 44> path fillnone dM15 8l14.729 14.382L15 35.367/>/svg>/span> span classlogo__text>waningflow/span> span classlogo__cursor>/span> /a> span classheader__right> nav classmenu> ul classmenu__inner menu__inner--desktop> li>a href/about>About/a>/li> /ul> ul classmenu__inner menu__inner--mobile> li>a href/about>About/a>/li> /ul>/nav> span classmenu-trigger> svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24> path dM0 0h24v24H0z fillnone/> path dM3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z/> /svg> /span> span classtheme-toggle> svg classtheme-toggler width24 height24 viewBox0 0 48 48 fillnone xmlnshttp://www.w3.org/2000/svg> path dM22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22 3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7 13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z/>/svg> /span> /span> /span>/header> div classcontent> div classposts> div classpost on-list> h1 classpost-title>a hrefhttps://blog.waningflow.com/articles/you-dont-know-js-yet-get-started-chapter-1/>译 你还不了解JS:起步 (第二版) 第一章 什么是JS/a>/h1> div classpost-meta> span classpost-date> 2020-08-30 /span> span classpost-author>— by waningflow/span> span classpost-read-time>— 6 min read/span> /div> span classpost-tags> #a hrefhttps://blog.waningflow.com/tags/js/>js/a> #a hrefhttps://blog.waningflow.com/tags/%E7%BF%BB%E8%AF%91/>翻译/a> /span> figure classpost-cover> img srchttps://blog.waningflow.com/img/you-dont-know-js-yet-get-started-chapter-1-cover.jpg alt译 你还不了解JS:起步 (第二版) 第一章 什么是JS/> /figure> div classpost-content> 你还不了解 JS,我也不完全了解。我们没有人完全了解,但是我们都可以开始更好的了解 JS。在“你还不了解 JS(YDKJSY)”系列第一本书的第一章中,我们将花些时间来建立前进的基础。首先,我们会涵盖各种重要的背后的处理细节,消除有关这门语言到底是(和不是)什么的一些误解。这对于了解 JS 构成维护的特性和过程很有用。所有的 JS 开发者都应该理解。如果你想去了解 JS,那么这就是你踏进这个旅程的第一步。关于本书 我强调旅程这个词,因为了解 JS 并不是一个终点,而是一个方向。不管你在这门语言上花了多少时间,你总能发现一些别的东西去学习和理解。因此,不要将本书视为速成书。相反,在你做这开始几步时,耐心和坚持才是最重要的。在本背景知识章节后,本书的其余部分列出了你在使用 YDKJSY 书籍深入研究和学习 JS 时会发现的内容的高级路线图。特别是第四章确定了构成 JS 语言的三个主要支柱:作用域/闭包、原型/对象、类型/强制转换。JS 是一种广泛而复杂的语言,具有许多的功能特性。但所有 JS 都建立在这三个基本支柱上。记住,即使这本书的标题是“起步”,也不能作为初学者/入门书使用。本书的主要任务是让你为在整个系列的其余部分深入学习 JS 做好准备。写本书时的假设是你在开始读 YDKJSY 之前已经至少有几个月的 JS 经验。因此要充分利用起步,确保你花大量的时间编写 JS 代码来积累经验。即使您之前已经写了很多 JS,本书也不该只是被快速扫过或者直接跳过。花时间把这里的内容完全消化掉。一个好的开始总取决于坚实的第一步。关于名字? JavaScript 这个名字可能是最容易让人误解的编程语言名字。它跟 Java 有关吗?仅仅是 Java 的脚本形式?仅用于编写脚本而不是实际程序吗?事实上,JavaScript 这个名字是营销手段的产物。在 Brendan Eich 最初构想该语言时,它的代号为 Mocha。在 Netscape 公司内部,用的是 LiveScript。但是当公开命名该语言时,JavaScript 赢得了投票。为什么?因为该语言最初是主要为了吸引 Java 程序员而设计的,并且“script”一词在当时很流行,指的是轻量级程序。这些轻量级的“script”将是第一种嵌入在 web 页面上的脚本。换句话说,JavaScript 命名可以说是一种营销策略,将其定位为当时更重也更知名的 Java 的一种不错的替代方案。就这点而言,它很容易被称为“WebJava”。JavaScript 代码和 Java 代码有些表面的相似之处,这些相似之处并不是来自于共同开发,而是它们对开发者来说具有 C(某种程度上为 C++)的语法期望。 /div> div>a classread-more button href/articles/you-dont-know-js-yet-get-started-chapter-1/>Read more →/a>/div> /div> div classpost on-list> h1 classpost-title>a hrefhttps://blog.waningflow.com/articles/tree-shaking-in-webpack4/>Webpack4中的Tree Shaking/a>/h1> div classpost-meta> span classpost-date> 2020-08-23 /span> span classpost-author>— by waningflow/span> span classpost-read-time>— 3 min read/span> /div> span classpost-tags> #a hrefhttps://blog.waningflow.com/tags/web/>web/a> #a hrefhttps://blog.waningflow.com/tags/webpack/>webpack/a> /span> figure classpost-cover> img srchttps://blog.waningflow.com/img/tree-shaking-in-webpack4-cover.jpg altWebpack4中的Tree Shaking/> /figure> div classpost-content> 名词解释 DCE (dead-code elimination) 去除不影响执行结果的代码,包括不会执行到的代码和未使用的变量等,如:var a 1; function b() { return b; return b2; } var c b(); 处理之后结果如下:function b() { return b; } b(); webpack 中实现 DCE 依靠的是代码压缩工具 uglify-es/terser(uglify-es 已经不再维护,terser 是其 fork 版本,webpack 从 4.26.0 版本从 uglify-es 迁移到 terser)。Tree-Shaking JS 环境中用于实现 DCE 的一种方式,主要用于跨文件(模块)间的 DCE。依赖于 ES2015 的模块语法(import 和 export)。三种场景 为了方便理解 Webpack4 中的 Tree-Shaking 具体是如何实现的,这里总结了三种典型的场景,每种场景都有其相应的配置去处理。Unused export // ./index.js(入口文件) import { cube, square } from . /div> div>a classread-more button href/articles/tree-shaking-in-webpack4/>Read more →/a>/div> /div> div classpost on-list> h1 classpost-title>a hrefhttps://blog.waningflow.com/articles/detect-cango-using-history-stack/>基于history stack检测canGoBack和canGoForward/a>/h1> div classpost-meta> span classpost-date> 2020-05-09 /span> span classpost-author>— by waningflow/span> span classpost-read-time>— 1 min read/span> /div> span classpost-tags> #a hrefhttps://blog.waningflow.com/tags/web/>web/a> #a hrefhttps://blog.waningflow.com/tags/electron/>electron/a> #a hrefhttps://blog.waningflow.com/tags/history/>history/a> /span> figure classpost-cover> img srchttps://blog.waningflow.com/img/detect-cango-using-history-stack-cover.jpg alt基于history stack检测canGoBack和canGoForward/> /figure> div classpost-content> 最近写的一个应用涉及到路由的跳转,需要加一个像浏览器地址栏一样的“后退”和“前进”的按钮。单纯的控制“后退”和“前进”很简单,history 库提供了三个接口:history.go(n) history.goBack() history.goForward() 但是为了在不能“后退”或“前进”时 disable 掉相应的按钮,就需要判断 canGo。history 库确实提供了一个方法,但是只能在 createMemoryHistory 时使用:history.canGo(n)(only in createMemoryHistory) 常用的 createBrowserHistory 和 createHashHistory 并没有提供这个方法,所以只能自己实现。 首先需了解 history stack 的形成过程,参考这篇文章。简单总结如下:history stack 记录一个标签页访问的历史记录序列,指针指向当前激活的历史记录 增加历史记录 如果指针在栈顶,则新记录直接被推入栈顶 A B -> A B C 如果指针不在栈顶,则先移除指针后面的所有历史记录,再将新纪录推入栈顶 A B C -> A B E 前进后退,移动指针即可 后退 A B C -> A B C 前进 A B C -> A B C 根据这些就可以实现一个 HistoryStack 类来模拟真实的 history stack: /div> div>a classread-more button href/articles/detect-cango-using-history-stack/>Read more →/a>/div> /div> div classpagination> div classpagination__buttons> /div>/div> /div> /div> footer classfooter> div classfooter__inner> div classcopyright copyright--user>Copyright © 2020 waningflow.com/div> /div>/footer>script srchttps://blog.waningflow.com/js/menu.js>/script>script srchttps://blog.waningflow.com/js/theme.js>/script>script srchttps://blog.waningflow.com/js/prism.js>/script> /div> script typeapplication/javascript>var doNotTrack false;if (!doNotTrack) { (function(i,s,o,g,r,a,m){iGoogleAnalyticsObjectr;irir||function(){ (ir.qir.q||).push(arguments)},ir.l1*new Date();as.createElement(o), ms.getElementsByTagName(o)0;a.async1;a.srcg;m.parentNode.insertBefore(a,m) })(window,document,script,https://www.google-analytics.com/analytics.js,ga); ga(create, UA-136598251-10, auto); ga(send, pageview);}/script> /body>/html>
Port 443
HTTP/1.1 200 OKServer: AliyunOSSDate: Wed, 02 Oct 2024 22:37:55 GMTContent-Type: text/htmlContent-Length: 13024Connection: keep-aliveVary: Accept-Encodingx-oss-request-id: 66FDCB43E20C8C32303B3189Accept-Ranges: bytesETag: 5D82BACC880F962EF931455FD5CF5F08Last-Modified: Sun, 30 Aug 2020 13:44:47 GMTx-oss-object-type: Normalx-oss-hash-crc64ecma: 952251297704904600x-oss-storage-class: StandardContent-MD5: XYK6zIgPli75MUVf1c9fCAx-oss-server-time: 1 !DOCTYPE html>html langen> head> meta namegenerator contentHugo 0.74.3 /> title>Blog of waningflow/title> meta http-equivcontent-type contenttext/html; charsetutf-8>meta nameviewport contentwidthdevice-width, initial-scale1.0>meta namedescription content/>meta namekeywords content/>meta namerobots contentnoodp/>link relcanonical hrefhttps://blog.waningflow.com/ />link relstylesheet hrefhttps://blog.waningflow.com/css/style.min.css>link relstylesheet hrefhttps://blog.waningflow.com/style.css>link relapple-touch-icon-precomposed sizes144x144 hrefhttps://blog.waningflow.com/img/apple-touch-icon-144-precomposed.png>link relshortcut icon hrefhttps://blog.waningflow.com/img/favicon.png>meta nametwitter:card contentsummary/>meta nametwitter:title contentBlog of waningflow/>meta nametwitter:description content/>meta propertyog:title contentBlog of waningflow />meta propertyog:description content />meta propertyog:type contentwebsite />meta propertyog:url contenthttps://blog.waningflow.com/ />meta propertyog:updated_time content2020-08-30T14:40:00+08:00 />meta propertyog:site_name contentBlog of waningflow />link relalternate typeapplication/rss+xml href/index.xml titleBlog of waningflow /> /head> body classdark-theme> div classcontainer> header classheader> span classheader__inner> a href/ classlogo styletext-decoration: none;> span classlogo__mark>svg xmlnshttp://www.w3.org/2000/svg classgreater-icon viewBox0 0 44 44> path fillnone dM15 8l14.729 14.382L15 35.367/>/svg>/span> span classlogo__text>waningflow/span> span classlogo__cursor>/span> /a> span classheader__right> nav classmenu> ul classmenu__inner menu__inner--desktop> li>a href/about>About/a>/li> /ul> ul classmenu__inner menu__inner--mobile> li>a href/about>About/a>/li> /ul>/nav> span classmenu-trigger> svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24> path dM0 0h24v24H0z fillnone/> path dM3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z/> /svg> /span> span classtheme-toggle> svg classtheme-toggler width24 height24 viewBox0 0 48 48 fillnone xmlnshttp://www.w3.org/2000/svg> path dM22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22 3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7 13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z/>/svg> /span> /span> /span>/header> div classcontent> div classposts> div classpost on-list> h1 classpost-title>a hrefhttps://blog.waningflow.com/articles/you-dont-know-js-yet-get-started-chapter-1/>译 你还不了解JS:起步 (第二版) 第一章 什么是JS/a>/h1> div classpost-meta> span classpost-date> 2020-08-30 /span> span classpost-author>— by waningflow/span> span classpost-read-time>— 6 min read/span> /div> span classpost-tags> #a hrefhttps://blog.waningflow.com/tags/js/>js/a> #a hrefhttps://blog.waningflow.com/tags/%E7%BF%BB%E8%AF%91/>翻译/a> /span> figure classpost-cover> img srchttps://blog.waningflow.com/img/you-dont-know-js-yet-get-started-chapter-1-cover.jpg alt译 你还不了解JS:起步 (第二版) 第一章 什么是JS/> /figure> div classpost-content> 你还不了解 JS,我也不完全了解。我们没有人完全了解,但是我们都可以开始更好的了解 JS。在“你还不了解 JS(YDKJSY)”系列第一本书的第一章中,我们将花些时间来建立前进的基础。首先,我们会涵盖各种重要的背后的处理细节,消除有关这门语言到底是(和不是)什么的一些误解。这对于了解 JS 构成维护的特性和过程很有用。所有的 JS 开发者都应该理解。如果你想去了解 JS,那么这就是你踏进这个旅程的第一步。关于本书 我强调旅程这个词,因为了解 JS 并不是一个终点,而是一个方向。不管你在这门语言上花了多少时间,你总能发现一些别的东西去学习和理解。因此,不要将本书视为速成书。相反,在你做这开始几步时,耐心和坚持才是最重要的。在本背景知识章节后,本书的其余部分列出了你在使用 YDKJSY 书籍深入研究和学习 JS 时会发现的内容的高级路线图。特别是第四章确定了构成 JS 语言的三个主要支柱:作用域/闭包、原型/对象、类型/强制转换。JS 是一种广泛而复杂的语言,具有许多的功能特性。但所有 JS 都建立在这三个基本支柱上。记住,即使这本书的标题是“起步”,也不能作为初学者/入门书使用。本书的主要任务是让你为在整个系列的其余部分深入学习 JS 做好准备。写本书时的假设是你在开始读 YDKJSY 之前已经至少有几个月的 JS 经验。因此要充分利用起步,确保你花大量的时间编写 JS 代码来积累经验。即使您之前已经写了很多 JS,本书也不该只是被快速扫过或者直接跳过。花时间把这里的内容完全消化掉。一个好的开始总取决于坚实的第一步。关于名字? JavaScript 这个名字可能是最容易让人误解的编程语言名字。它跟 Java 有关吗?仅仅是 Java 的脚本形式?仅用于编写脚本而不是实际程序吗?事实上,JavaScript 这个名字是营销手段的产物。在 Brendan Eich 最初构想该语言时,它的代号为 Mocha。在 Netscape 公司内部,用的是 LiveScript。但是当公开命名该语言时,JavaScript 赢得了投票。为什么?因为该语言最初是主要为了吸引 Java 程序员而设计的,并且“script”一词在当时很流行,指的是轻量级程序。这些轻量级的“script”将是第一种嵌入在 web 页面上的脚本。换句话说,JavaScript 命名可以说是一种营销策略,将其定位为当时更重也更知名的 Java 的一种不错的替代方案。就这点而言,它很容易被称为“WebJava”。JavaScript 代码和 Java 代码有些表面的相似之处,这些相似之处并不是来自于共同开发,而是它们对开发者来说具有 C(某种程度上为 C++)的语法期望。 /div> div>a classread-more button href/articles/you-dont-know-js-yet-get-started-chapter-1/>Read more →/a>/div> /div> div classpost on-list> h1 classpost-title>a hrefhttps://blog.waningflow.com/articles/tree-shaking-in-webpack4/>Webpack4中的Tree Shaking/a>/h1> div classpost-meta> span classpost-date> 2020-08-23 /span> span classpost-author>— by waningflow/span> span classpost-read-time>— 3 min read/span> /div> span classpost-tags> #a hrefhttps://blog.waningflow.com/tags/web/>web/a> #a hrefhttps://blog.waningflow.com/tags/webpack/>webpack/a> /span> figure classpost-cover> img srchttps://blog.waningflow.com/img/tree-shaking-in-webpack4-cover.jpg altWebpack4中的Tree Shaking/> /figure> div classpost-content> 名词解释 DCE (dead-code elimination) 去除不影响执行结果的代码,包括不会执行到的代码和未使用的变量等,如:var a 1; function b() { return b; return b2; } var c b(); 处理之后结果如下:function b() { return b; } b(); webpack 中实现 DCE 依靠的是代码压缩工具 uglify-es/terser(uglify-es 已经不再维护,terser 是其 fork 版本,webpack 从 4.26.0 版本从 uglify-es 迁移到 terser)。Tree-Shaking JS 环境中用于实现 DCE 的一种方式,主要用于跨文件(模块)间的 DCE。依赖于 ES2015 的模块语法(import 和 export)。三种场景 为了方便理解 Webpack4 中的 Tree-Shaking 具体是如何实现的,这里总结了三种典型的场景,每种场景都有其相应的配置去处理。Unused export // ./index.js(入口文件) import { cube, square } from . /div> div>a classread-more button href/articles/tree-shaking-in-webpack4/>Read more →/a>/div> /div> div classpost on-list> h1 classpost-title>a hrefhttps://blog.waningflow.com/articles/detect-cango-using-history-stack/>基于history stack检测canGoBack和canGoForward/a>/h1> div classpost-meta> span classpost-date> 2020-05-09 /span> span classpost-author>— by waningflow/span> span classpost-read-time>— 1 min read/span> /div> span classpost-tags> #a hrefhttps://blog.waningflow.com/tags/web/>web/a> #a hrefhttps://blog.waningflow.com/tags/electron/>electron/a> #a hrefhttps://blog.waningflow.com/tags/history/>history/a> /span> figure classpost-cover> img srchttps://blog.waningflow.com/img/detect-cango-using-history-stack-cover.jpg alt基于history stack检测canGoBack和canGoForward/> /figure> div classpost-content> 最近写的一个应用涉及到路由的跳转,需要加一个像浏览器地址栏一样的“后退”和“前进”的按钮。单纯的控制“后退”和“前进”很简单,history 库提供了三个接口:history.go(n) history.goBack() history.goForward() 但是为了在不能“后退”或“前进”时 disable 掉相应的按钮,就需要判断 canGo。history 库确实提供了一个方法,但是只能在 createMemoryHistory 时使用:history.canGo(n)(only in createMemoryHistory) 常用的 createBrowserHistory 和 createHashHistory 并没有提供这个方法,所以只能自己实现。 首先需了解 history stack 的形成过程,参考这篇文章。简单总结如下:history stack 记录一个标签页访问的历史记录序列,指针指向当前激活的历史记录 增加历史记录 如果指针在栈顶,则新记录直接被推入栈顶 A B -> A B C 如果指针不在栈顶,则先移除指针后面的所有历史记录,再将新纪录推入栈顶 A B C -> A B E 前进后退,移动指针即可 后退 A B C -> A B C 前进 A B C -> A B C 根据这些就可以实现一个 HistoryStack 类来模拟真实的 history stack: /div> div>a classread-more button href/articles/detect-cango-using-history-stack/>Read more →/a>/div> /div> div classpagination> div classpagination__buttons> /div>/div> /div> /div> footer classfooter> div classfooter__inner> div classcopyright copyright--user>Copyright © 2020 waningflow.com/div> /div>/footer>script srchttps://blog.waningflow.com/js/menu.js>/script>script srchttps://blog.waningflow.com/js/theme.js>/script>script srchttps://blog.waningflow.com/js/prism.js>/script> /div> script typeapplication/javascript>var doNotTrack false;if (!doNotTrack) { (function(i,s,o,g,r,a,m){iGoogleAnalyticsObjectr;irir||function(){ (ir.qir.q||).push(arguments)},ir.l1*new Date();as.createElement(o), ms.getElementsByTagName(o)0;a.async1;a.srcg;m.parentNode.insertBefore(a,m) })(window,document,script,https://www.google-analytics.com/analytics.js,ga); ga(create, UA-136598251-10, auto); ga(send, pageview);}/script> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]