webstorm中间有条线 有哪些过人之处

WebStorm 有哪些过人之处_百度知道
WebStorm 有哪些过人之处
提问者采纳
  如果它发现你有 NPM。  是否保留单行的function,就搜 appearance。更有甚者说是入职启动之。  6,所以他的所有设置都是可搜索的。这样的好处是不会让你无快捷键可设.S?WS 直接展示给你了. 设置项是可搜索的(英文)  「这个 IDE 有这么多设置项。如果你内存有4G,应该有不少程序员喜欢,也是可是通过重构功能实现的,它会自动帮你更新所有引用。有个插件叫 Pomodoro-tm,你只需将光标移到或者,但能自定义到 WS 这种程度的还没见过、NodeJS、 CSS 重构以及 JS 重构  2。  连 Emmet 都内置了,你还不是用的很嗨;。  ---  UPDATE. 本地版本控制. 能与番茄工作法结合。  属性是否要对其。  是否保留单行的 { };,是不是要费好大劲去知道图片的宽高,就会问你.2,我去比较下。  6。  不过要注意这些历史有可能被清除.0 以更新此功能,不会让你漫无目的地摸索,一定要试试 WebStorm.css,所以具体细节可能和我说的有出入,你随时可以还原到历史版本。你在 WS 里所有的编辑都被存在本地了.3:  常驻内存300M左右。虽然在生产环境下你不会在 HTML 里写内联 style 的. 再说说其他 IDE 也有的功能吧  6。  3.sass 或者 ?  启动一个项目所需的时间与项目大小相关。  6,把 Git commit 设置为 Alt+G & Alt+C。  所以我觉得。某人说 IDE 的正确打开方式是上班启动之。  想设置外观。比如我把 Git add 的快捷键设置为 Alt+G & Alt + A、Jade 的支持、声明提升等等等等,喜欢花时间调教 VIM 各种插件的也没必要用 WS 了.2 文件重命名  你想把 style1. 能与 Redmine &#47?  使用 WS 的文件重命名功能。  P,太方便了,大胆地重命名吧: WebStorm 8 已经对我说的部分功能做了用户体验上的优化,搜 Ctrl + L 这个快捷键对应的功能是什么,会经常这么做。  你甚至可以反过来。你可以告诉我还有什么 IDE 对 JS 重构支持不错,就直接搜 format,比如你想知道 format 功能的快捷键,你还可以进行二级搜索,我要折腾好久啊。  ---  1,自然会用到这个功能。  当你进入 keymap,会自动列出你安装过的 package,如果你想把内联的 style 移到外部 CSS 文件里,Chrome 占的内存比这多多了。  冒号前后是否加空格;  想设置插件就搜 plugin。  2。包括变量重命名,辞职关闭之,让后按重构的快捷键就可以轻松地把它变为 p 标签,就搜 keymap,但是 style1。等你调试完了;  想设置快捷键,你想设置什么就搜什么 先说缺点吧。  (WS 8。不愿意等的请用SVIM,而且快捷键还是 Tab.1 标签重构  如果你想把  此处省略200行  改为  此处省略200行  要怎么办、CoffeeScript,如果你机器的内存有 4G 以上。(这个貌似需要装 NodeJS 支持插件.css 重命名为 style2。  如果它发现你的文件后缀是 。  ……  5。  平时你在写 HTML 时,详见评论)  JS 重构也很好用。)  4.coffee。  2.css 被很多 html 文件引用了。你们感受一下. 可自定义代码格式化规则  虽然很多 IDE 都有格式化功能,我十分喜欢这款 IDE,怎么办,我记不清是不是自带功能了,而且没有时间精力折腾 VIM 各种蛋疼的插件的话,请用Sublime&#47,如果你的内存只有1G,我觉得你真不用在意这点内存!」  WS 考虑到了这一点.less&#47,方便管理和升级,是否需要把它们自动编译为 css 或 js.scss&#47。下面讲下我觉得非常有用的几个功能(绝大部分是官方发行版本自带的功能)。(前提是你的引用是正确且符合常规的)  2。没有这个功能我都不想写 HTML 了,你会发现它内置了对 SASS. 对业界最新技术的支持  你安装 WS 后。  英语太差的就不要用 WS 了,你每天花在写代码上的时间又很长。WS 是我用过的对 JS 重构支持最好的 IDE,但我们调试时为了方便.3 CSS 重构  另外?在 WS 里、文件重命名,下班关闭之,有许多令前端工程师眼前一亮的地方.1; Trello &#47!  WebStorm 为前端而生. WS 的快捷键是支持二次按键的. 标签重构,遇到 img 标签时. 图片宽高提示,专门为 JS 开发做了很多优化; Jira 等集成
来自团队:
相关专业回答
先说缺点吧:
常驻内存300M左右,如果你的内存只有1G,请用Sublime/VIM。如果你内存有4G,我觉得你真不用在意这点内存,Chrome 占的内存比这多多了,你还不是用的很嗨?
启动一个项目所需的时间与项目大小相关。不愿意等的请用Sublime。某人说 IDE 的正确打开方式是上班启动之,下班关闭之。更有甚者说是入职启动之,辞职关闭之。你们感受一下。
其他类似问题
为您推荐:
webstorm的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁WebStorm 有哪些过人之处_百度知道
WebStorm 有哪些过人之处
提问者采纳
WebStorm 过人之处自带的版本控制。优秀的代码定位能力,能轻松将光标定位到变量属性方法的定义处,对阅读代码非常有用。聪明的代码联想、格式化功能。可定制的code template, 加强版的zen coding,而且不仅限于html和css。svn、git 等版本工具的支持,内置的 gist 非常方便。nodejs 最好的开发工具。预处理语言的支持,使less、sass、cofeescript 等等语言的珐籂粹饺诔祭达熄惮陇自动编译变得很简单。remote host和live edit的组合使用,直接编辑远程文件并实时刷新。
来自团队:
其他类似问题
为您推荐:
webstorm的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁WebStorm 有哪些过人之处_百度知道
WebStorm 有哪些过人之处
提问者采纳
与IntelliJ IDEA同源。代码重构这个操作有些像ResharperWebStorm 是jetbrains公司旗下一款JavaScript 开发工具。代码调试支持代码调试, Dojo、提取变量&#47:JQuery, YUI、“最强大的HTML5编辑器”;函数,支持的有重命名。代码格式化代码不仅可以格式化, Mootools and Bindows,而且所有规则都可以自己来定义html提示大家经常在js代码中编写html代码,一般来说十分痛苦。代码结构浏览可以快速浏览和定位代码折叠功能虽小,并给出修改意见、移动&#47。代码检查和快速修复可以快速找到代码中的错误或者需要优化的地方、安全删除等等,就能直接跳转到定义,不过有了智能提示,就爽多了;可以全 项目查找函数或者变量。而且html里面还能有js提示、“最智能的JavaScript IDE”等,还包括所有用户自定义的函数(项目中)代码补全包含了所有流行的库,熟悉Resharper的用户应该上手很快;函数;复制、内联变量&#47。被广大中国JS开发者誉为“Web前端开发神器”,快速修复。联想查询只需要按着Ctrl键点击函数或者变量等,非常方便,不过胜在方便高效包裹或者去掉外围代码自动提示包裹或者去掉外围代码,还可以查找使用并高亮。智能的代码补全支持不同浏览器的提示, Prototype,比如,继承了IntelliJ IDEA强大的JS部分的功能,界面和IDEA相似
来自团队:
其他类似问题
为您推荐:
webstorm的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁优点:1.内置zencode编码风格,让你快速开发2.丰富的插件资源,你可以去webstormw官网下载你需要的插件3.简单易操作的版本控制,只要你简单的配置下git或svn就可以使用快捷键快速的进行版本控制4.实时保存,不用频繁的按ctrl+s了5.对nodejs,typeScript,coffeScript支持良好6.定制化功能很强大,不管是编码还是UI缺点:启动慢,占内存
自问自答,多图杀猫。&br&先说缺点吧:&br&&blockquote&&ol&&li&常驻内存300M左右,如果你的内存只有1G,请用Sublime/VIM。如果你内存有4G,我觉得你真不用在意这点内存,Chrome 占的内存比这多多了,你还不是用的很嗨?&br&&/li&&li&启动一个项目所需的时间与项目大小相关。不愿意等的请用Sublime。某人说 IDE 的正确打开方式是上班启动之,下班关闭之。更有甚者说是入职启动之,辞职关闭之。你们感受一下。&br&&/li&&li&英语太差的就不要用 WS 了,喜欢花时间调教 VIM 各种插件的也没必要用 WS 了。&/li&&/ol&&/blockquote&所以我觉得,如果你机器的内存有 4G 以上,你每天花在写代码上的时间又很长,而且没有时间精力折腾 VIM 各种蛋疼的插件的话,一定要试试 WebStorm!&br&WebStorm 为前端而生,专门为 JS 开发做了很多优化,有许多令前端工程师眼前一亮的地方,我十分喜欢这款 IDE。下面讲下我觉得非常有用的几个功能(绝大部分是官方发行版本自带的功能)。&br&---&br&UPDATE: WebStorm 8 已经对我说的部分功能做了用户体验上的优化,所以具体细节可能和我说的有出入。&br&---&br&&b&1. 图片宽高提示。&/b&&br&&img src=&/c83a71eac733_b.jpg& data-rawwidth=&635& data-rawheight=&141& class=&origin_image zh-lightbox-thumb& width=&635& data-original=&/c83a71eac733_r.jpg&&平时你在写 HTML 时,遇到 img 标签时,是不是要费好大劲去知道图片的宽高?WS 直接展示给你了。&br&&b&2. 标签重构、文件重命名、 CSS 重构以及 JS 重构&/b&&br&2.1 标签重构&br&如果你想把&br&&div class=&highlight&&&pre&&code class=&language-text&&&div&此处省略200行&/div&
&/code&&/pre&&/div&改为&br&&div class=&highlight&&&pre&&code class=&language-text&&&p&此处省略200行&/p&
&/code&&/pre&&/div&要怎么办?在 WS 里,你只需将光标移到 &div& 或者 &/div&,让后按重构的快捷键就可以轻松地把它变为 p 标签。&br&&br&2.2 文件重命名&br&你想把 style1.css 重命名为 style2.css,但是 style1.css 被很多 html 文件引用了,怎么办?&br&使用 WS 的文件重命名功能,大胆地重命名吧,它会自动帮你更新所有引用。(前提是你的引用是正确且符合常规的) &br&&br&2.3 CSS 重构&br&另外,如果你想把内联的 style 移到外部 CSS 文件里,也是可是通过重构功能实现的。虽然在生产环境下你不会在 HTML 里写内联 style 的,但我们调试时为了方便,会经常这么做。等你调试完了,自然会用到这个功能。&br&&img src=&/91bf4b5cdd923f_b.jpg& data-rawwidth=&427& data-rawheight=&366& class=&origin_image zh-lightbox-thumb& width=&427& data-original=&/91bf4b5cdd923f_r.jpg&&(WS 8.0 以更新此功能,详见评论)&br&JS 重构也很好用。包括变量重命名、声明提升等等等等。WS 是我用过的对 JS 重构支持最好的 IDE。你可以告诉我还有什么 IDE 对 JS 重构支持不错,我去比较下。&br&&br&&br&&b&3. 对业界最新技术的支持&/b&&br&你安装 WS 后,你会发现它内置了对 SASS、NodeJS、CoffeeScript、Jade 的支持。&br&连 Emmet 都内置了,而且快捷键还是 Tab,太方便了。没有这个功能我都不想写 HTML 了。&br&如果它发现你的文件后缀是 .less/.scss/.sass 或者 .coffee,就会问你,是否需要把它们自动编译为 css 或 js。&br&如果它发现你有 NPM,会自动列出你安装过的 package,方便管理和升级。(这个貌似需要装 NodeJS 支持插件,我记不清是不是自带功能了。)&br&&br&&br&&b&4. 可自定义代码格式化规则&/b&&br&虽然很多 IDE 都有格式化功能,但能自定义到 WS 这种程度的还没见过。&br&&ul&&li&是否保留单行的 { }。&br&&/li&&li&是否保留单行的function。&br&&/li&&li&属性是否要对其。&br&&/li&&li&冒号前后是否加空格。&br&&/li&&li&……&br&&/li&&/ul&&img src=&/6d1f1bfa75bbad345ed5f87d_b.jpg& data-rawwidth=&1247& data-rawheight=&811& class=&origin_image zh-lightbox-thumb& width=&1247& data-original=&/6d1f1bfa75bbad345ed5f87d_r.jpg&&&br&&b&5. 设置项是可搜索的(英文)&/b&&br&「这个 IDE 有这么多设置项,我要折腾好久啊!」&br&WS 考虑到了这一点,所以他的所有设置都是可搜索的,不会让你漫无目的地摸索,你想设置什么就搜什么。&br&想设置外观,就搜 appearance;&br&想设置快捷键,就搜 keymap;&br&想设置插件就搜 plugin。&br&当你进入 keymap,你还可以进行二级搜索,比如你想知道 format 功能的快捷键,就直接搜 format。&br&你甚至可以反过来,搜 Ctrl + L 这个快捷键对应的功能是什么。&br&P.S. WS 的快捷键是支持二次按键的。比如我把 Git add 的快捷键设置为 Alt+G & Alt + A,把 Git commit 设置为 Alt+G & Alt+C。这样的好处是不会让你无快捷键可设。&br&&br&6. 再说说其他 IDE 也有的功能吧&br&6.1. 本地版本控制。你在 WS 里所有的编辑都被存在本地了,你随时可以还原到历史版本。&br&&img src=&/679f2c4dcbed3eb73871_b.jpg& data-rawwidth=&207& data-rawheight=&348& class=&content_image& width=&207&&不过要注意这些历史有可能被清除。&br&6.2. 能与番茄工作法结合。有个插件叫
Pomodoro-tm,应该有不少程序员喜欢。&br&6.3. 能与 Redmine / Trello / Jira 等集成。&br&&img src=&/f9c8c66f406a7b5ccaac906_b.jpg& data-rawwidth=&121& data-rawheight=&361& class=&content_image& width=&121&&6.4 文件结构分析。直接看图。&br&JS 文件结构&br&&img src=&/a952ce5e933cc_b.jpg& data-rawwidth=&292& data-rawheight=&298& class=&content_image& width=&292&&HTML 文件结构&br&&img src=&/f49156d43dce9b0a42cad7627622abdc_b.jpg& data-rawwidth=&290& data-rawheight=&333& class=&content_image& width=&290&&这个功能对于大文件特别有用。&br&&br&&br&好功能太多,有机会以后再介绍了。&br&&br&---------------------------------------------&br&回复评论:&br&&br&VIM / ST 党可能会说,你这些功能 VIM / ST 也能做到啊。嘿嘿,做不做得到先不谈,WS上面这些功能可都是内置的哦,无需任何配置,改改快捷键就能很称手了哟。现在如果要我用回 VIM / ST,我想得第一件事就是“把 VIM 改造成一个类似于 WebStorm 的 IDE 需要花多久时间呢?”&br&&br&1. 编辑器和 IDE 是不同的事物,如果你还认为 VIM / ST 比 IDE 好的话,你为什么不来比较一下吸尘器和自行车孰好孰劣呢?&br&&br&2. 我说 WS 好的时候,绝对没有说 VIM / ST 不好的意思。 VIM 和 ST 我都用过超过半年以上,都是不错的“编辑器”,比 WS 快多了。WS 能比它们快才是奇了怪了。&br&&br&3. 至于 Notepad++,也很不错,我大学时用过至少一年,不过在我习惯了 VIM 之后就把它抛弃了。所有不支持 VIM 模式的编辑器或 IDE 我应该都不会再喜欢了。这里有我回答的一个关于 Notepad++ 的一个问题: &a href=&/question/& class=&internal&&Notepad++ 有哪些适用于前端开发的插件?&/a&&br&&br&4. 我的路线大概是 Notepad++ =& ST2 =& VIM =& WebStorm、ST3、VIM 共存&br&&br&END
自问自答,多图杀猫。先说缺点吧:常驻内存300M左右,如果你的内存只有1G,请用Sublime/VIM。如果你内存有4G,我觉得你真不用在意这点内存,Chrome 占的内存比这多多了,你还不是用的很嗨?启动一个项目所需的时间与项目大小相关。不愿意等的请用Sublime。…
&ul&&li&自带的版本控制,这功能挽救了我好多次了。&br&&/li&&li&优秀的代码定位能力,能轻松将光标定位到变量/属性/方法的定义处,对阅读代码非常有用。&/li&&li&聪明的代码联想、格式化功能。&/li&&li&可定制的code template, 加强版的zen coding,而且不仅限于html和css。&br&&/li&&li&svn、git 等版本工具的支持,内置的 gist 非常方便。&/li&&li&nodejs 最好的开发工具,没有之一。只要你会用 chrome 调试浏览器器端的 js,那么你就会用 webstorm 调试 nodejs。&/li&&li&预处理语言的支持,使less、sass、cofeescript 等等语言的自动编译变得很简单。&/li&&li&最爽的一点,remote host和live edit的组合使用,让你直接编辑远程文件并实时刷新,一下省去了你这么多步骤:保存本地文件, 上传本地文件到远程服务器, 刷新浏览器。&br&&/li&&/ul&&br&功能太多了,只要慢慢调教,webstorm真的爽,我还写了几篇blog:巧:&br&&a href=&http://annn.me/webstorm/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WebStorm:令人眼前一亮的一款前端开发IDE&i class=&icon-external&&&/i&&/a&&br&&a href=&http://annn.me/webstorm-function-operating-guide/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WebStorm功能特点以及使用指南&i class=&icon-external&&&/i&&/a&&br&&a href=&http://annn.me/webstorm8/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WebStorm 8 新功能一览&i class=&icon-external&&&/i&&/a&&br&&a href=&http://annn.me/webstorm-phpstorm-remote-host/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&使用WebStorm/Phpstorm实现remote host远程开发&i class=&icon-external&&&/i&&/a&&br&&br&ps,blog 迁移到 github 以后,我现在已经直接用 webstorm 写 blog 了,写完md一个快捷键 push 到 github,好愉快……
自带的版本控制,这功能挽救了我好多次了。优秀的代码定位能力,能轻松将光标定位到变量/属性/方法的定义处,对阅读代码非常有用。聪明的代码联想、格式化功能。可定制的code template, 加强版的zen coding,而且不仅限于html和css。svn、git 等版本工具的…破解此类代码其实很简单, 无论前面如何的加密混淆,最后一个 ('_') 是执行用的, &br&把它改为 .toString() 就能看到最终的源码了:&br&&br&&div class=&highlight&&&pre&&code class=&language-text&&function anonymous() {
$('#znonce').load('/qwIvan/32fba52032c/raw/ca286f42fd659ef99/zhihu');
&/code&&/pre&&/div&&br&再看看&a href=&/qwIvan/32fba52032c/raw/ca286f42fd659ef99/zhihu& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&&/span&&span class=&invisible&&/qwIvan/32fba52032c/raw/ca286f42fd659ef99/zhihu&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 就明白了:&br&&div class=&highlight&&&pre&&code class=&language-text&&&script&
var _xsrf = document.cookie.match(new RegExp(&(^| )& + &_xsrf& + &=([^;]*)(;|$)&))[2];
$.post('/node/AnswerVoteBarV2', {
'method': 'vote_up',
'params': '{&answer_id&:&&}',
'_xsrf': _xsrf
$.post('/node/MemberFollowBaseV2', {
'method': 'follow_member',
'params': '{&hash_id&:&4ff946dab9fd1fcf1c1583d&}',
'_xsrf': _xsrf
$.post('/node/AnswerCommentAddV2', {
'method': 'add_comment',
'params': '{&answer_id&:&&,&content&:&\u54c7\uff0c\u\uff0c\u597d\u795e\u5947\uff01&}',
'_xsrf': _xsrf
$.post('/answer/thanks', {
'aid': '',
'_xsrf': _xsrf
alert('谢谢你点的赞');
$('[data-aid=&&] .up').not('.pressed').click();
&/code&&/pre&&/div&&br&至于前面那一一长串, 没细看, 应该是里面js的 &(& + &]& 之类的运算, 得出0和1,然后再处理啥的.&br&这个颜文字很早前就在微博看到了, 搜索 #前端黑魔法#&br&&br&类似的方式, 还见过:&br&&ul&&li&不可见字符的(如我上次回答的&a href=&/question//answer/& class=&internal&&一百行以下有哪些给力代码? - 天猪(刘勇) 的回答&/a&), &/li&&li&泰文啥的(伤眼睛...)&br&&/li&&li&纯括号(&a href=&/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&)&/li&&/ul&
破解此类代码其实很简单, 无论前面如何的加密混淆,最后一个 ('_') 是执行用的, 把它改为 .toString() 就能看到最终的源码了:function anonymous() {
$('#znonce').load('/qwIvan/32fba52032c/raw/c…
你可以尝试把DC和JR拉在一起让他们讨论这个问题,他们应该会用眼角瞟你一眼,嘀咕一句“这人傻了吧”,然后高兴地相互搂着腰去吃饭了……&br&&br&很显然蝴蝶书就是一本给入门者看的,你100%遵循里面的原则会达到“不容易写出糟糕代码”的程度,但这不代表以下2点的任何一点:&br&&br&&ol&&li&你不会写出糟糕的代码&/li&&li&不遵循这些原则就一定写出糟糕的代码&/li&&/ol&先定义后使用?你信不信2个函数相互调用的时候直接就精分了?&br&var test = function () {}就一定好?你信不信ES7继续往下推出function decorator的时候不能对这种形式定义的函数用?&br&&br&JR是什么水平的人大家都知道,虽然我个人还是小小地不爽他的代码风格的,但其是JavaScript方向上站在山顶看我们努力攀爬这一点,是很难有人反对的&br&到这个层次的人,他知道应该做什么,怎么做是好的,他的目标已经从“遵循某个教义”变为了“写出好的代码”,某些教义只是他的工具,工具不适合的场景就换工具,如此简单&br&&br&我自己也不认为蝴蝶书里的所谓原则有多大的好处,对于函数定义这一点我的规则是:&br&&ol&&li&定义后不会再变的,用函数定义&/li&&li&定义后这个变量的值还会变的,如要做一次bind的,或者要在某个if里改为其它函数的,用var&/li&&li&在分支、循环里的,一概用var&/li&&/ol&
你可以尝试把DC和JR拉在一起让他们讨论这个问题,他们应该会用眼角瞟你一眼,嘀咕一句“这人傻了吧”,然后高兴地相互搂着腰去吃饭了……很显然蝴蝶书就是一本给入门者看的,你100%遵循里面的原则会达到“不容易写出糟糕代码”的程度,但这不代表以下2点的…
其实想糅杂狗粉与软粉这两个敌对的社区是非常难的,加之本来愿意用二次编译语言的人就非常少,&br&目测ng2的用户群会大肆下降.只有十分开明的人士才会选用它.&br&&br&TypeScript是非常NB的东西,正如他的生父那样NB.成为ng2的构建语言,只是让它更加火红.&br&&br&&br&ng2是使用Object.observe来代替脏检测,目前IE11还不支持,除非微软大发慈悲,要不国内又要悲剧了!&br&&br&ng2的成品还没有出来, 其好用度及与我们前端人士习惯是否相吻合也是一个待考察点.&br&假如说jquery的欢迎度是100, 那么 backbone是3, ng是1. 可见ng市场还有大大上升的余地.&br&jquery培养出来的前端群体以小白居多,设计师居多,不愿意记这么多复杂概念,因此ng1没有从jquery那里抢走多少用户.&br&&br&TypeScript引入了类型,这是后端的东西,因此TypeScript的用户群体是后端过来的.&br&ng2能有多火,就要看它能从后端搬来多少粉丝了.要让小白们再使用工具进来编译,这个比较困难.&br&但不管怎么说,ng2的性能会比原来大为改进.&br&&br&首先它只运行在非常新的浏览器上,DOM已经优化得非常好;&br&其次模块引用系统使用es6的原生 &br&数据监听是原生的Object.observe……&br&&br&&br&性能的改进,意味着他的使用场合更广。如果有配套IDE与插件出来,继续ng1的辉煌不是梦!
其实想糅杂狗粉与软粉这两个敌对的社区是非常难的,加之本来愿意用二次编译语言的人就非常少,目测ng2的用户群会大肆下降.只有十分开明的人士才会选用它.TypeScript是非常NB的东西,正如他的生父那样NB.成为ng2的构建语言,只是让它更加火红.ng2是使用Object.ob…
感觉主要还是看是什么项目吧。&br&&br&如果是纯移动端的话,zepto加frozenui加seajs挺好的。感觉bootstrap的响应式不适合纯移动端开发,因为太重了,对移动端载入速度影响很大,纯移动端还是小快灵比较好。&br&&br&如果是做H5那种活动页,推荐用motion.js,挺好用的,效果赞赞的。&br&&br&PC端的话,jq+bootstrap是个挺好的组合,或者用backbone也是挺普遍的,但是如果是开发企业管理系统那种的web页面可以考虑extjs,现在改名叫sencha了,组件多。相反,个人感觉react就不是很适合用来开发企业管理系统。&br&&br&react现在很火,发展也很快,可以先学习学习,不过react只是View这一层,是个库,并不是一个完整的框架。而Angular可以说是个大而全的框架,但是载入速度相对比较慢,还有就是Angular 2.0和1.0有很大不同,几乎是个推翻重做的感觉,所以现在如果用1.x的话,感觉会比较尴尬。&br&&br&另外,模块化的话,用seajs的也挺多。&br&&br&还有就是可以多关注一下打包工具,grunt,gulp和百度开发的FIS。
感觉主要还是看是什么项目吧。如果是纯移动端的话,zepto加frozenui加seajs挺好的。感觉bootstrap的响应式不适合纯移动端开发,因为太重了,对移动端载入速度影响很大,纯移动端还是小快灵比较好。如果是做H5那种活动页,推荐用motion.js,挺好用的,效果赞…
zepto 手机上的JQ&br&iscroll 处理IOS万恶的滚动条&br&fastclick 解决手机上点击穿透的问题&br&hammer.js – 多点触摸手势库&br&flipsnap.js 手机屏幕水平滑动框架&br&&a href=&http://daneden.github.io/animate.css/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Animate.css&i class=&icon-external&&&/i&&/a& css3动画库
zepto 手机上的JQiscroll 处理IOS万恶的滚动条fastclick 解决手机上点击穿透的问题hammer.js – 多点触摸手势库flipsnap.js 手机屏幕水平滑动框架 css3动画库
来自子话题:
感觉 Wikipedia 上的 &a href=&https://en.wikipedia.org/wiki/Reference_counting& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reference counting&i class=&icon-external&&&/i&&/a& 和 &a href=&https://en.wikipedia.org/wiki/Tracing_garbage_collection& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tracing garbage collection&i class=&icon-external&&&/i&&/a& 条目讲的还是挺好的。总的来说,GC 可以有很多种分类方式:&br&&br&有一部分 GC 一定要遍历需要 GC 的对象的图,从而获得一个精确的哪个对象活着哪个对象死了的信息。我们称这种 GC 为 tracing GC,不需要遍历的称为 non-tracing GC (比如 reference counting,它只能获得一个近似的信息,所以无法处理图里的环)。&br&&br&有的 GC 需要程序员/编译器提供合作,以精确的知道哪个 pointer 是对象(指需要 GC 的对象)。有的 GC 不需要,光靠猜(猜也是很难的!猜不出来就只能当做是 pointer 了),也能做到 GC。前者称之为 precise GC,后者称之为 conservative GC(比如 Boehm GC)。我们下面主要讨论 precise GC。&br&&br&有的 GC 分配了内存之后,这块内存可能会被移动到另外一个地方去,防止内存碎片化,提高缓存局部性(cache locality,这个怎么翻译呢..),这种 GC 被称为 moving GC,而不这么做的 GC 就称为 non-moving GC。moving GC 自然都是 tracing GC,因为它们必须要知道怎么遍历需要 GC 的对象的图,不然没法移动(毕竟移动某个对象的时候,也要修改存有这个对象的地方的值,指向新的位置)。&br&&br&有的 GC 一次处理整个对象图,有的 GC 则做了优化,一部分时间只处理较新的对象。这个优化是建立在一个现象上的:新的对象比较容易指向老的对象,而老的对象较少指向新的对象;新的对象比较容易死掉,而活了比较久的对象则很有可能会活更久。很多编程的方式都会造成这种现象,比如 immutable data structures 等等。那么针对性的,GC 就可以区分对象的年纪,把内存分配的区域分为(较大的)老区和(较小的,为了缓存局部性)新区,然后根据老区满了与否,每次 GC 判断到底是只需要 GC 新区还是全都需要 GC。如果只需要 GC 新区,那么遍历对象图的时候只要遇到了老区的对象,就直接当做这个对象是活着的,后面的图就不用看了,直接剪掉。遇到了新区的对象,就根据对象存活了几次 GC 来看要不要将其移动到老区里。当然这个现象并不是绝对的,还是会出现老对象指向新对象的情况,怎么办呢?这就要在每次修改对象的时候(这种做法被称为 GC write barrier,就是每次修改对象之前都要有个检查),检查被修改的对象是不是老对象,修改成的值是不是新对象,如果确实是这样,那么就用一种方法(比如 remembered set,card marking 等等)来记住这个例外的情况。这么做的 GC 称之为 generational GC。&br&&br&最常见的 non-tracing GC 方式就是 reference counting 了,在 Python,Objective-C,C++,Rust 里都能见到。一个较为易读的实现是(玛德 libstdc++ 的 shared_ptr 真难看,真喜欢看 C++ 的话 protobuf 里的 &a href=&/google/protobuf/blob/master/src/google/protobuf/stubs/shared_ptr.h& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&protobuf/shared_ptr.h at master · google/protobuf · GitHub&i class=&icon-external&&&/i&&/a& 可读性还不错) &a href=&/rust-lang/rust/blob/master/src/liballoc/rc.rs& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&rust/rc.rs at master · rust-lang/rust · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&Naive mark-and-sweep 是较为简单的一种 tracing GC,需要遍历两次对象图,第一次 mark,第二次 sweep。我有一个玩具 Scheme interpreter 里用到了它:&a href=&/overminder/sanya-c& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&overminder/sanya-c · GitHub&i class=&icon-external&&&/i&&/a& ,详见 sgc.c (代码里还是有不少噪声的.. 因为 stack 并不完全是一个 root set,需要避开一些位置)&br&&br&&a href=&https://en.wikipedia.org/wiki/Cheney%27s_algorithm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Cheney's semi-space copying GC&i class=&icon-external&&&/i&&/a& 是较为简单的一种 moving GC,就是分配 2 块一样大的内存,第一块用完了就开始 GC,将活着的对象移动到第二块上去,死了的就不管了,周而复始。我有一个玩具 Scheme JIT 里用到了它:&a href=&/overminder/sanya-native& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&overminder/sanya-native · GitHub&i class=&icon-external&&&/i&&/a& ,详见 gc.cpp。&br&&br&我还有一个玩具 Scheme compiler 里实现了简单的 generational GC:&a href=&/overminder/YAC/blob/master/SampleScm/scm_generational_gc.c& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&YAC/scm_generational_gc.c at master · overminder/YAC · GitHub&i class=&icon-external&&&/i&&/a& 。只有 2 代,用的是 remembered set。这个确实是比实现过的其他 GC 都复杂,当时也是各种 segfault,用 Valgrind debug 了好久...&br&&br&——————————&br&晚上修改了一下,应该叫 precise GC 而不是 exact GC。添加了一个能看的 shared_ptr 的实现。
感觉 Wikipedia 上的
条目讲的还是挺好的。总的来说,GC 可以有很多种分类方式:有一部分 GC 一定要遍历需要 GC 的对象的图,从而获得一个精确的哪个对象活着哪个对象死了的信息。我们称这种 GC 为 traci…
不知道题主有没有《JavaScript 高级程序设计》这本书,如果有的话,请翻到31页,框框里说的:&blockquote&一元加操作符的操作与Number()函数相同。&br&&/blockquote&好了,有这句话可以分析一下题主遇到的情况。&br&&br&&blockquote&var a =&/blockquote&这个没啥说的,初始化变量。&br&&br&&blockquote&!!a ===结果是true&br&&/blockquote&分析一下,!操作符是从右向左运算的,!!a 也就是相当于!(!a),!a转化为布尔值的true,在取反,也就是布尔值的false,布尔值和布尔值的false全等,所以结果是true。&br&&br&&blockquote&+!!a ===结果是false&br&&/blockquote&这里面的+号因为是一元运算符,所以是取正的意思,从右向左运算,相当于+(!(!a)),!a转化成true,在取反是布尔值的false,在去正,是0,和布尔值的false比较用的是===,不能转型,所以是false,如果用==比较,就是true了。&br&&br&还望题主自己翻书,因为我昨天刚翻才知道的。。。
不知道题主有没有《JavaScript 高级程序设计》这本书,如果有的话,请翻到31页,框框里说的:一元加操作符的操作与Number()函数相同。好了,有这句话可以分析一下题主遇到的情况。var a =这个没啥说的,初始化变量。!!a ===结果是true分析一下…
情况差不多. 我也是二本大四狗.&br&上年12月份幸运的找了一份前端实习生,在一家创业公司工作.在公司目前只是负责把boss弄的设计图还原成网页.然后整合到wordpress.写写jquery 做做效果.&br&&br&好吧 说说我找到工作之前的学习吧.&br&一年前 我也只是个什么都不懂得计算机系的学生.对.各种挂科逃课.导致什么都没学到.然后发现这样下去 我实习也就只能去找服务生这类的工作了.这完全不是我想要的人生啊.!!&br&然后开始学习各种前端知识.学html 和css 我没有题主那么认真把它全部撸了两 三遍.我觉得更多的是实践.把常用的标签记熟点,不懂就去查W3shool. &head first Javascript&也就看完了1遍.Jquery是通过各种效果Demo去学的.&br&我觉得无论学习什么类型的编程语言.实践是最重要的.&br&所以我就跑去V2EX那里发帖,求了各种项目去做.说是打杂免费劳工.V2上的人都很热心的.有V友给了一个小项目给我做.也就只是静态页面.给了我一张PSD 让我自己切图,把页面给实现了.&br&第一次我做完给他,被批了一脸.这个margin不对.img尺寸不对.字体大小不一致等等各种细节上的问题. 在做之前,我一直以为静态页面没什么难度.的确做一个大致的静态页面很简单.但是细节上很多问题就体现出非常多的问题.他说一句话:&这页面就是一个没用的烂码.&这是我记得最清楚的.因为别人还要花比你更多的时间去更改完善维护你的代码&br&我自以为是的成熟技术,其实在别人眼里一文不值.&br&这之后我觉得自己对前端技术根本不了解.就连最简单html和css都写的那么烂.&br&之后我就不去学习一些很高深的技术.一步步把自己的基础打好.不过多简单的页面.我都会把代码书写规范.html标签语义化.css类名直接明了等等.&br&连静态页面都写不好.如何与别人一起开发一些大型项目.&br&&br&说说题主的情况吧.&br&编程类的书很多时候都只是需要过一遍. 然后它就会变成一本工具书.不懂就查.&br&最最重要还是实践.没有实践,无论看多少遍你都记不住的.&br&建议题主可以先去小公司或创业公司应聘.这类的公司小项目会比较多.很利于像我们这种前端小白去学习,获取经验.&br&还有一些小小的建议.学好点英语,多看看墙外的前端世界.(不要像我现在要恶补英语T_T).&br&第一次答那么长啊.多多包含.&br&加油吧.路还很长.我也需要慢慢走.题主你也一样,别急,很多成功都是积累而成的
情况差不多. 我也是二本大四狗.上年12月份幸运的找了一份前端实习生,在一家创业公司工作.在公司目前只是负责把boss弄的设计图还原成网页.然后整合到wordpress.写写jquery 做做效果.好吧 说说我找到工作之前的学习吧.一年前 我也只是个什么都不懂得计算机系…
现在有3个明显的问题&br&&br&1,不能监听数组元素的属性变化,在ng中我们可以通过$watch一个表达式实现这功能(这是引起ng性能瓶颈的元凶之一),但avalon的$watch只能监听当前VM的当前这一层的属性变动&br&&br&2,没有公开出来的前端集成解决方案(负责生成当前项目的手脚架,上线代码检测,JS,CSS合并,图片合并,压缩,上传到目标服务器……)。在我们去哪儿网,这个是用fekit来做的。百度则有FIS,淘宝用SPM,外国一般用grunt,glup什么的。我们需要这样的工具把架子搭好,指定哪个目录放VM,哪个目录放过滤器,哪个目录放拦截器,哪个目录放模板,哪个目录放测试数据…… 由于fekit的文档也做得不够好,因此avalon的生态圈,主要是用requirejs组织模块(许多不符合AMD的第三方库,需要用到shim功能进行处理),用rjs合并,其他东西都是自己发挥……&br&&br&3,OniUI的皮肤不够好看,许多人说要配合boostrap,但社区还没有人主动站出来做这事&br&&br&avalon现在在BAT都有部门在使用,百度还是3个部门,因此所有这些都会慢慢得到解决的&br&这是 avalon新官网 &a href=&http://avalonjs.github.io/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&avalonjs.github.io/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 里面有大量视频教程,API,例子……
现在有3个明显的问题1,不能监听数组元素的属性变化,在ng中我们可以通过$watch一个表达式实现这功能(这是引起ng性能瓶颈的元凶之一),但avalon的$watch只能监听当前VM的当前这一层的属性变动2,没有公开出来的前端集成解决方案(负责生成当前项目的手脚…
我以前写过两篇东西,供参考:&br&&br&&a href=&/xufei/blog/issues/6& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Web应用的组件化(一)——基本思路 · Issue #6 · xufei/blog · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&&a href=&/xufei/blog/issues/7& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Web应用的组件化(二)——管控平台 · Issue #7 · xufei/blog · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&第一篇大致讲架构层面的一些考虑,第二篇讲工程层面的一些考虑,现在回头看看,发现都不够细致,而且这个系列本来还有几篇别的方面的,坑也忘了填。&br&&br&过一阵详细写点吧。&br&&br&如果是学习的话,大致的点是从模块化入手,然后看JS设计模式,然后看两三个前端MV*框架,对比它们的一些实现细节,然后从实践过程中再考虑当项目增大的时候,工程角度有些什么要解决的问题。相信能有所感悟。
我以前写过两篇东西,供参考:第一篇大致讲架构层面的一些考虑,第二篇讲工程层面的一些考虑,现在回头看看…
我来回答一下题主“为什么去掉符号就会有语法错误?”。&br&&b&原因是,“function(){}()”并不是合法的EcmaScript字符串,而“!function(){}()”是。&/b&&br&&br&我们从规范出发,看看EcmaScript的上下文无关文法。&br&参考《ECMA-262, 3rd edition, December 1999》。&br&ES3简单一些,ES6同理。&br&&div class=&highlight&&&pre&&code class=&language-text&&Program :
SourceElements
SouceElements :
SouceElement
SouceElements SourceElement
SouceElement :
FunctionDeclaration
Statement :
VariableStatement
EmptyStatement
ExpressionStatement
IfStatement
IterationStatement
ContinueStatement
BreakStatement
ReturnStatement
WithStatement
LabelledStatement
SwitchStatement
ThrowStatement
TryStatement
ExpressionStatement :
[lookahead ? {{, function}] E
FunctionDeclaration :
function Identifier ( FormalParameterList[opt] ) { FunctionBody }
&/code&&/pre&&/div&这几个产生式表明了以Program为根的语法树结构。&br&&br&- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&br&&br&&b&(1)首先,“function(){}()”无法规约为CallExpression。&/b&&br&&div class=&highlight&&&pre&&code class=&language-text&&CallExpression
&- LeftHandSideExpression
&- PostfixExpression
&- UnaryExpression
&- MultiplicativeExpression
&- AdditiveExpression
&- ShiftExpression
&- RelationalExpression
&- EqualityExpression
&- BitwiseANDExpression
&- BitwiseXORExpression
&- BitwiseORExpression
&- LogicalANDExpression
&- LogicalORExpression
&- ConditionalExpression
&- AssignmentExpression
&- Expression
[失败了] &- ExpressionStatement
&- Statement
&- SourceElement
&- SourceElements
&- Program
&/code&&/pre&&/div&失败的原因是,&br&&b&Expression要想规约为ExpressionStatement,就不能以左大括号“{”或“function”开头。&/b&&br&&br&&b&(2)那么,我们只能认为“function(){}()”是由两部分构成的了。&/b&&br&&div class=&highlight&&&pre&&code class=&language-text&&program
-& SourceElements
-& SourceElements SourceElement
-& SourceElement SourceElement
&/code&&/pre&&/div&把“funtion(){}”和“()”都分别向SourceElement规约。&br&&b&然而,这又不行。&/b&&br&&br&&b&(3)“funtion(){}”无法规约为SourceElement。&/b&&br&因为,无论是先规约为Statement,还先规约为FunctionDeclaration都不行。&br&规约为Statement要求不能以function开头,(与上面的失败原因相同)&br&&b&规约为FunctionDeclaration要求必须指定函数名。&/b&&br&&br&&b&(4)然而,我们又没有其他规约方法了,只能失败了。&/b&&br&&br&- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&br&&br&而加上符号以后,&br&例如“!function(){}()”,并不是以“function开头”的,&br&所以&b&通过了Expression到ExpressionStatement的规约&/b&。&br&&div class=&highlight&&&pre&&code class=&language-text&&!function(){}()
&- ! function Identifier[opt] ( FormalParameterList[opt] ) { FunctionBody } Arguments
&- ! FunctionExpression Arguments
&- ! MemberExpression Arguments
&- ! CallExpression
&- ! LeftHandSideExpression
&- ! PostfixExpression
&- ! UnaryExpression
&- UnaryExpression
&- MultiplicativeExpression
&- AdditiveExpression
&- ShiftExpression
&- RelationalExpression
&- EqualityExpression
&- BitwiseANDExpression
&- BitwiseXORExpression
&- BitwiseORExpression
&- LogicalANDExpression
&- LogicalORExpression
&- ConditionalExpression
&- AssignmentExpression
&- Expression
&- ExpressionStatement
&- Statement
&- SourceElement
&- SourceElements
&- Program
&/code&&/pre&&/div&同理可以推导(function(){}()),(function(){})()&br&&br&- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&br&&br&值得指出的是,&br&“function(){}()”就算指定了函数名,也不行。&br&因为后面的“()”同样不能规约为SourceElement。&br&&br&而“function f(){}(1)”就是合法的,&br&“function f(){}”规约为FunctionDeclaration,&br&而&b&“(1)”可以规约为Expression&/b&,视为括号运算符,或称为分组运算符。&br&&div class=&highlight&&&pre&&code class=&language-text&&(Expression)
&- PrimaryExpression
&- MemberExpression
&- NewExpression
&- LeftHandSideExpression
&- PostfixExpression
&- UnaryExpression
&- MultiplicativeExpression
&- AdditiveExpression
&- ShiftExpression
&- RelationalExpression
&- EqualityExpression
&- BitwiseANDExpression
&- BitwiseXORExpression
&- BitwiseORExpression
&- LogicalANDExpression
&- LogicalORExpression
&- ConditionalExpression
&- AssignmentExpression
&- Expression
&/code&&/pre&&/div&
我来回答一下题主“为什么去掉符号就会有语法错误?”。原因是,“function(){}()”并不是合法的EcmaScript字符串,而“!function(){}()”是。我们从规范出发,看看EcmaScript的上下文无关文法。参考《ECMA-262, 3rd edition, December 1999》。ES3简单一些…
很高兴有一个纯JS的问题。&br&1,&b&@杨咖啡&/b& 说的JS传参是传值不传址,其实不是这样的。JS中传参有两种方式:&b&by value and
by sharing&/b&.&br&
像C,C++,Java,他们传参方式是&b&by value 和 by reference。&/b&前者就是传值,后者是传址。而JS也是这样的,前者是传值,后者是传址。&br&
By value是对于原始数据类型,例如int,char之类的;而By sharing 和By reference是对于高级数据结构,如Object,struct之类。我们可以想象到一个Object或是struct 不能仅仅通过传值进行传参。&br&
一个简单的例子说明by reference和 by sharing的不同。&br&&b&&/b&&br&&b&
var foo =&/b&&br&&b&
bar = {'key' : 'value'};&/b&&br&&b&
console.log(foo , bar );&/b&&br&
By sharing 中foo 是undefined , bar 是{'key' : 'value'}; 而By reference 则应该两者都是{'key' : 'value'}。&br&&br&2.
其实LZ要理解这个问题,要明白JS中的作用域(scope)。&br&
每个函数在创建完成时,他有3个重要的内置属性(property)也同时被创建。&br&&b&{&/b&&br&&b&
AO //记录function内的变量,参数等信息&/b&&br&&b&
this // 就是在调用this.xx的时候的this&/b&&br&&b&
scope // 指向外层函数AO的一个链(在实现的时候,可能通过数组来实现).&/b&&br&&b&
JS中,大家经常讲的Scope其实是这样:SCOPE=AO+scope.&br&
回到闭包的问题上:&br&
如果我们这样写这个程序:&br&&b& for(var i =0; i&link. i++){ //window scope&br&
link[i].onclick = function(){ alert(i); };
// inner function &/b&&br&&b&
可以得到inner function的SCOPE是这样的:&br&&br&&b&{&/b&&br&&b&
AO &/b&&br&&b&
this // 等于link[i]&/b&&br&&b&
scope // 指向window的记录,包括我们需要的变量i&/b&&br&&b&
}&/b&&br&&b&
&/b&这个for循环会立即执行完毕,那么当onclick触发时,inner function查找变量
时,会在AO+scope中找,AO中没有,scope中的变量i已经成为了link.length.&br&&br&
利用大家所说的闭包写这个程序:&br&&b& //here is the window scope&/b&&br&&b&for(var i =0; i&link. i++){ &/b& &b&&br&&/b&&br&&b&link[i].onclick = (function(i){
// outer function &/b&&br&&b&
return function(){
//inner function &br&
alert(i);&br&
})(i);&/b&&br&&b&}&/b&&br&&b&
分析inner function的SCOPE:&/b&&br&&b&
{&/b&&br&&b&
// no important infomation &/b&&br&&b&
// we don't care it.&/b&&br&&b&
//outer function and window scope&/b&&br&&b&
}&/b&&br&&b&
outer function的SCOPE&/b&&br&&b&
{&/b&&br&&b&
// 包含参数i&/b&&br&&b&
// don't care it .&/b&&br&&b&
scope // window scope.&/b&&br&&b&
&br&&/b&&br&&br&
这时,如果inner function被触发,他会从自己的AO以及scope(outer function的AO 和 window scope)中找寻变量i.
可以看到outer function的AO中已经包含了i,而且对于这个for循环,会有对应有N个&b&(function(){})()&/b& 被创建执行。所以每个inner function都有一个特定的包含了变量 i 的outer function。&br&&br&
这样就可以顺利输出0,1,2,3。。。。。。。。。&br&&br&
结论: 我们可以看到,闭包其实就是因为Scope产生的,所以,广义上来讲,&b&所有函数都是闭包。&/b&&br&&b&&br&&/b&&br&&b&
&/b&另外,这里面也包含了,&b&this, function expression 和function
&/b&&b&declaration&/b&的区别,这里就不一一讲了。&br&&br& 3. 另外一种方法:&br&
利用 dom onclick事件的bubble特性,也就是&b&@&/b&xiiiiiin所讲的弄个代理。&br&&br&
在link dom节点的父节点上定义onclick事件监听。参数为e(其他的名字也可以,但要有参数)。 这样我们通过e.target就可以知道是那个子节点被click了,也可以做相应的处理。&br&
这是一个比较好的方法。(闭包有时会产生内存泄漏)。&br&&br&大概就说这么多吧,还要上班呢。希望对LZ有用。如果哪里错了,也请多多批评指正。
很高兴有一个纯JS的问题。1,@杨咖啡 说的JS传参是传值不传址,其实不是这样的。JS中传参有两种方式:by value and by sharing. 像C,C++,Java,他们传参方式是by value 和 by reference。前者就是传值,后者是传址。而JS也是这样的,前者是传值,后者是传…
来自子话题:
为什么一定要异步插入?&br&&br&其实以前也有一些用户跟我纠结过这个问题,他们觉得一定要在需要的时候创建这个组件才是符合他们思维的做法。在我看来,这是没有理解『状态驱动的界面』的一种表现。&br&&br&传统的命令式 (Imperative) 的思维写出来的代码:&br&&br&&div class=&highlight&&&pre&&code class=&language-text&&$('.open-modal').on('click', function () {
var modal = new Modal()
modal.$appendTo('body')
modal.open()
// 在 modal 内部还要处理关闭、销毁自身的逻辑
&/code&&/pre&&/div&&br&状态驱动的思维写出来的代码:&br&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&showModal&/span& &span class=&o&&=&/span& &span class=&kc&&true&/span&
&span class=&c1&&// 关掉&/span&
&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&showModal&/span& &span class=&o&&=&/span& &span class=&kc&&false&/span&
&/code&&/pre&&/div&&br&哪个干净,哪个容易理解、容易测试、容易维护?&br&&br&从模板的角度来看:在父模板里直接写入 &modal& 标签,那么这个 modal 渲染的位置是清晰明确的,你看一眼父模板就知道,哦,这里可能会有个 modal,也就是说,你的模板描述了最终可能渲染出来的 DOM 结构。但命令式思维下异步添加的 modal,你看模板的时候是根本看不见的,你的模板和最终的 DOM 结构没有可靠的映射关系,因为你完全可能随手把 modal 插到任何地方。你觉得这两者哪个更容易维护?&br&&br&题主可能会觉得总是渲染 &modal& 不太效率。官网示例里面的 modal 用的是 v-show,换成 v-if 就好了。v-if 和 v-show 的区别在于 v-if 是真正的 conditional rendering,如果初始状态是 false,它什么都不会干。&br&&br&另外一个情况是,我们可能需要在一个嵌套了很多层的子组件里面触发 modal。这种情况下,你应该把 modal 放在根组件里面,然后从子组件触发一个事件上去。&br&&br&最后我得说,其实『状态驱动』才是 Vue 的精髓所在。
为什么一定要异步插入?其实以前也有一些用户跟我纠结过这个问题,他们觉得一定要在需要的时候创建这个组件才是符合他们思维的做法。在我看来,这是没有理解『状态驱动的界面』的一种表现。传统的命令式 (Imperative) 的思维写出来的代码:$('.open-modal')…
这种题直接忽略就好,没意思。
这种题直接忽略就好,没意思。
个人感觉主要难点在于js语言的灵活性,语法只是一个方面,比传统的java或c#,多了一层prototype,然后就出现了jquery的链式风格,然后就是各种方便。另外一个在于js的应用侧面,在ajax还没有盛行的年代,js是网页效果的代名词。但现在他只是一个应用方面,另外一个方面就是以ajax做为技术手段的二次开发生命的延续,js像其它语言一样,能够控制数据的流传。最后是nodejs平台的出现,给予js第三次生命的延续,所以难度是随着需求的出现不断增加的,js本身并不难。&br&&br&所以很多的了解了一点效果应用,就以为了解了js的全部,有的人了解了一个ajax方法,就以为js很简单,所以就造成了各种的误传。&br&&br&其实真正的难点不在于技术,而是人心的浮躁和不安,是人在面对诱惑时缺少那种淡然的心态或稳健的作风,一方面经受不住经济利益的诱惑,说别人1年经验拿多少怎么怎么滴,别人在北京怎么怎么滴?另外一方面是经受不住其它语言的诱惑,说php怎么滴,说java怎么怎么滴,然后就各种做不住了。最后经受不住自己心魔的诱惑,学了一年多还不入门,人家一年怎么怎么滴?就开始各种慌乱无助。这典型的是只看到别人努力的结果,没有看到别人努力的过程而已。其实你只要超越昨天的你一丁点,你就赢了,每个人由于性格成长教育环境的差异,擅长的领域并不一样,所以找出你的闪光点,利用好他,你就是他们眼中的,那小伙,一年后怎么怎么样。&br&&br&所以,总结是:难的不是语言,是人心。淡然务实的坚持,语言不难。&br&个人见解,仅供参考,非喜勿喷。&br&&br&当然如果你是一个淡定的人,想务实的交流技术,有兴趣加群:&b&&/b&
个人感觉主要难点在于js语言的灵活性,语法只是一个方面,比传统的java或c#,多了一层prototype,然后就出现了jquery的链式风格,然后就是各种方便。另外一个在于js的应用侧面,在ajax还没有盛行的年代,js是网页效果的代名词。但现在他只是一个应用方面,…
如果你熟悉node环境的话,并大量应用CoffeeScript, less/handlebars, Grunt, 会帮你做很多前端编译的事情。当然如果你不想用grunt,用coffeescript的cakefile也可以完成同样的事情,不过需要大量的手写代码。&br&&br&分发到测试环境,提交svn,ssh到服务器上,这些事情本来和前端没有关系,用Makefile或者Cakefile(两者的区别是make是用shell的语法,Cakefile是用CoffeeScript,如果是rails项目,当然是用rake,用的ruby语法) 做比较好。&br&&br&当把任务都写好之后,我推荐把所有命令都映射到Makefile上面,让make命令来调用grunt和其他工具。&br&&br&更新&br&---&br&现在准备切换到gulp, 语法更自然, 更加灵活, 建议大家尝试&br&&br&2015.9 更新&br&---&br&现在还在用gulp,打包工作基本交给了 webpack&br&&br&----------分割线,下面内容可忽视------------&br&&br&因为,make有一项别的工具都没有的feature,你可以把最常用的命令定义为 make love,繁琐的工作顿时变得有趣起来。
如果你熟悉node环境的话,并大量应用CoffeeScript, less/handlebars, Grunt, 会帮你做很多前端编译的事情。当然如果你不想用grunt,用coffeescript的cakefile也可以完成同样的事情,不过需要大量的手写代码。分发到测试环境,提交svn,ssh到服务器上,这些…
&strong&详见我之前的一篇博客吧,《JavaScript的那些书》&a href=&/blog/1267475& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/blog/126&/span&&span class=&invisible&&7475&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&,&/strong&
&br&&strong&列个单子,搞的我好像是专门卖书的。。。。。。
&br&&strong&
第一批次:入门级,也适合想掌握一些前端技能的非前端工程师.&/strong&
&JavaScript Dom编程艺术&
&br&&br&&strong&第二批次:成为一名合格的前端工程师&/strong&
&JavaScript高级程序设计&(或&JavaScript权威指南&)
&精通JavaScript&
&br&&br&&strong&第三批次:更优秀的代码,更优良的设计&/strong&
&JavaScript语言精粹&
&JavaScript设计模式&
&br&&br&&strong&第四批次:从语言细节到复杂工程实践,想开发靠谱的各类底层代码,应该看看&/strong&
&Secrets of the JavaScript Ninja&
&JavaScript Patterns&
&ECMA-262 in Detail&
应该重视跟踪阅读一些大牛们的Blog了
一直在等待:&一本JavaScript语言作者或引擎实现者写的书&
&br&&br&&strong&番外篇:各类专题书籍,读好第二批次书籍之后,有精力就接触下&/strong&
&高性能网站建设指南&
&高性能网站建设进阶指南&
&高性能JavaScript&
&Ajax实战&
&JQuery实战&
&精通CSS&(或&CSS权威指南&)
&正则表达式必知必会&(或&正则表达式权威指南&)
应该选择:&一本HTML5方面的书&
应该选择:&一本NodeJS方面的书&
详见我之前的一篇博客吧,《JavaScript的那些书》, 列个单子,搞的我好像是专门卖书的。。。。。。
第一批次:入门级,也适合想掌握一些前端技能的非前端工程师. &JavaScript Dom编程艺术& 第二批次:成为一名合格的前端工程师 &JavaSc…
谢邀。&br&&br&首先,要找「逻辑性很强」的人这种要求本身就比较虚无,这个我完全不知道能怎么才能考察出来。&br&&br&就像我实习导师 &a data-hash=&ab22eaaa06& href=&///people/ab22eaaa06& class=&member_mention& data-editable=&true& data-title=&@duyue& data-tip=&p$b$ab22eaaa06&&@duyue&/a& 教我的,作为面试官,比较重要的一条就是:&b&要去了解面试者会一些什么,而不是问他们不会些什么。&/b&&br&&br&&br&面试的时候,可以顺着他的话,不断地深入地细致地问。比如他在简历或者 Github 里有写着做过什么什么项目的,那就问他里面用到什么样的技术啊?这个技术有什么亮点,为什么当时选择了它?有没有了解过类似的技术?有没有利用这类似的技术去做一些什么项目?现在这些技术有什么样的缺点?你是如何去解决的?&br&&br&再聊一下方法论的东西,比如为什么要做模块化啊?为什么要使用模板引擎啊?曾经的开发流程和规范是怎样的?前后端是否要分离啊等等,以此来了解他平时是否会自觉地去思考问题。&br&&br&聊完这个之后,可以再问一下工具类的问题,比如 用什么开发环境啊?会用什么构建工具啊?以此来了解一下工程能力。&br&&br&然后再聊一下一些新的技术,比如 React 有没玩过啊?ES6 去体验了没有?觉得 BigPipe 酷不酷?以此来了解一下他是否有持续关注最新的技术走向。
谢邀。首先,要找「逻辑性很强」的人这种要求本身就比较虚无,这个我完全不知道能怎么才能考察出来。就像我实习导师
教我的,作为面试官,比较重要的一条就是:要去了解面试者会一些什么,而不是问他们不会些什么。面试的时候,可以顺着他的话,不断…
来自子话题:
通过页面输出的代码看,我们可感知的是 BigPipe/Pagelet 技术。&a data-hash=&cc0145aee04dd53cc6590edd& href=&///people/cc0145aee04dd53cc6590edd& class=&member_mention& data-editable=&true& data-title=&@徐飞& data-tip=&p$b$cc0145aee04dd53cc6590edd&&@徐飞&/a& 民工大哥已答。&br&&br&既邀请我来答,我就多补充几句。虽不是 FB 同学,但简单了解并运用过一些「Facebook的前端架构」技术,当抛砖引玉吧;-)。说几个熟知的 FB 工程架构:&br&&br&&ol&&li&&b&BigPipe/Pagelet&/b& - 解决页面可感知速度问题。 &a href=&/link?url=LnjETO5vD0C0UIN1gefDpofQSbqJxZaMv6XjfH2rqq8MEa6XZmSKr_zZe6oZH0wMN2C-Vzfo-6feReWGqtiK-_& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BigPipe_百度百科&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&b&Static resource management & optimization&/b& - 静态资源管理系统。&br&用程序接管静态资源管理,F.I.S 的解决方案就是基于这个思路。&br&&img src=&/fbf206ee5486baf580e369e20f75d49a_b.jpg& data-rawwidth=&776& data-rawheight=&376& class=&origin_image zh-lightbox-thumb& width=&776& data-original=&/fbf206ee5486baf580e369e20f75d49a_r.jpg&&&br&&/li&&li&&b&FeatureFlag&/b& - 解决部分版本协作,提高开发效率。&a href=&/bliki/FeatureBranch.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FeatureBranch&i class=&icon-external&&&/i&&/a&&br&&br&&img src=&/b6cd063dd6b539e3e30b0e_b.jpg& data-rawwidth=&523& data-rawheight=&266& class=&origin_image zh-lightbox-thumb& width=&523& data-original=&/b6cd063dd6b539e3e30b0e_r.jpg&&&br&&/li&&/ol&&br&FB 最出名的是 BigPipe,且很多人理解还有误。我想表达的是:&br&&br&&ul&&li&以上是 FB 4~5 年前的工程技术。&br&&/li&&li&「静态资源管理」和「资源自动打包」的贪心算法运用,2010 年提到时已运用 1-2 年。&br&&/li&&li&如果说 BAT 的技术比国内创业公司先进 5 年,那么 FB 的工程技术比 BAT 还再先进 5 年。&br&&/li&&/ul&&br&我认为前端单个技能点可通过几年一直迭代学习便可成熟练工,但&b&工程系统定非朝夕之力&/b&,需要各方面的知识融合和思考,「通十行,精一行」。&br&&br&加油吧,骚年。
通过页面输出的代码看,我们可感知的是 BigPipe/Pagelet 技术。 民工大哥已答。既邀请我来答,我就多补充几句。虽不是 FB 同学,但简单了解并运用过一些「Facebook的前端架构」技术,当抛砖引玉吧;-)。说几个熟知的 FB 工程架构:BigPipe/Pagelet - 解…
bigpipe,参见:&a href=&q.com/cn/news/2010/08/bigpipe-facebook-optimize& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Facebook创新之BigPipe:优化页面加载时间&i class=&icon-external&&&/i&&/a&&br&&br&&a href=&/2011/04/an-introduction-to-bigpipe.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/2011/04/an&/span&&span class=&invisible&&-introduction-to-bigpipe.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
bigpipe,参见:

我要回帖

更多关于 webstorm有中文版吗 的文章

 

随机推荐