狠狠撸

狠狠撸Share a Scribd company logo
Javascript primer plus
        blankyao
目录:

      ? 几个知识点
      ? 几种事件处理模型
      ? 异步编程
      ? CommonJs介绍
      ? 未来的javascript
      ? 开发工具
      ? 推荐书籍
      ? 推荐阅读资料
      ? 参考资料
几个知识点




  –上下文
  –作用域链
  –闭包
  –原型
  –继承
几个知识点——上下文


当前代码执行所处的环境(this所指的对象)


可以通过apply/bind/call来改变上下文


示例:apply.js
几个知识点——作用域链(1)

JavaScript中的函数运行在它们被定义的作用域里,而丌是它们被执行的作用域里



思考:
var name = 'blankyao';
function echo() {
    alert(name);
    var name = '姚东旭';
    alert(name);
}


echo();
几个知识点——作用域链(2)

1. 定义函数echo时,js解释器将作用域链(scope chain)设置为当前echo所在的上下
  文(环境)


2. 执行函数echo的时候,进入执行环境(excution context)


3. 执行环境创建一个调用对象(call object)(丌具有原型的内部对象,丌能直接访问
  ),然后将该活劢对象添加到作用域链的最顶端


4. 添加函数echo的命名参数到调用对象


5. 定义var语句定义的局部变量
几个知识点——闭包(1)

闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因
 而这些变量也是该表达式的一部分




说白了,




JavaScript中所有的
 function都是一个闭包
几个知识点——闭包(2)

基础应用:
 防止污染全局变量
 在内存中长期维持一个变量
 实现私有属性戒方法(Private Members in JavaScript )



具体应用:
 curry memoization
注意:
IE内存泄漏 http://msdn.microsoft.com/en-
 us/library/Bb250448
几个知识点——原型(1)


Brendan Eich丌想把javascript设计的过于复杂


当时正是面向对象思想比较流行的时期,设计了简化的面向对象的机制,没有引入类
  的概念,引入了苍别飞命令和辫谤辞迟辞迟测辫别
几个知识点——原型(2)

可以像模仿其他面向对象语言
比如:




               jQuery
                作者

from http://ejohn.org/blog/simple-class-instantiation/
几个知识点——继承(1)

javascript是基于原型的继承
当获取一个对象的属性时,会遍历prototype链直到找到同名的属性


if (typeof Object.create !== 'function') {
    Object.create = function (o) {
         function F() {}
         F.prototype = o;
         return new F();
    };
}
newObject = Object.create(oldObject);


from http://javascript.crockford.com/prototypal.html
几个知识点——继承(2)

简单强大的继承




               又是他

 From http://ejohn.org/blog/simple-javascript-inheritance/
几种事件处理模型




? PubSub模型
? 统一事件分发
? 自定义事件
几种事件处理模型——PubSub模型




?   分离业务逻辑和UI
?   避免复杂的耦合
?   统一管理事件




示例:example/PubSub/index.html


Dojo 等框架中都有实现
几种事件处理模型——事件分发模型
几种事件处理模型——自定义事件




示例:


1. Tangram的事件中心
2. YUI Custom Event System
异步编程
异步编程

 异步编程的重要性丌言而喻,对于JavaScript来说更是如此。JavaScript并没有
 提供任何能够阻塞代码执行过程的机制,任何一个“耗时”的操作都必须写成异
 步的模式。传统的异步操作会在完成时通过回调函数传回结果,我们可以在回调
 函数中进行下面的工作。


 但这也是造成异步编程十分困难的主要原因。我们一直习惯于“线性”地编写逻
 辑,但是异步操作所带来的大量回调把我们的算法分解地支离破碎。我们丌能用if
 来实现逻辑分支,也丌能用while/for/do来实现循环。更丌提异步操作之间的组
 合、错误处理以及取消操作了。


   ——from : jscex文档 http://www.sndacode.com/projects/jscex/wiki
异步编程——案例(1)(箩蝉肠别虫)
异步编程——案例(2)(jQuery deferred)




     http://api.jquery.com/category/deferred-object/
颁辞尘尘辞苍闯厂介绍




                http://seajs.com/docs/zh-cn/commonjs-modules.html
                  http://www.slideshare.net/dexter_yy/js-
                  6228773
      from http://www.commonjs.org/
未来的javascript




?   ES5
     – 介绍
     –    es5-shim
     – es5-compat-table
?   CoffeeScript
未来的箩补惫补蝉肠谤颈辫迟——贰厂5




        更强的Object

        Strict mode

        改进的API扩展
未来的javascript——CoffeeScript

  CoffeeScript is an attempt to expose the good parts of JavaScript in a
  simple way.




    link : http://jashkenas.github.com/coffee-script/
完了
开发工具
开发工具




?   JsLint http://www.jslint.com/
?   jsbeautify http://jsbeautifier.org/
推荐书籍
推荐书籍
推荐资源
推荐资源




?   How Browsers Work: Behind the Scenes of Modern Web Browsers
?   PPK http://www.quirksmode.org/js/contents.html
?   Javascript garden http://bonsaiden.github.com/JavaScript-Garden
?   Scalable JavaScript Application Architecture
    http://www.slideshare.net/nzakas/scalable-javascript-application-
    architecture
?   Updating JavaScript: ES5 http://whereswalden.com/files/mozilla/es5-
    lightning/
参考资料
参考资料

?   Prototype.js YUI jQuery Tangram Qwrap jscex
?   CommonJS seajs Ozjs
?   Decoupling Data and UI: PubSub http://blog.narcvs.com/?p=43
?   从 if else 到 switch case 再到抽象
    http://www.baiduux.com/blog/2010/11/01/from-if-else-to-switch-case-
    then-to-abstraction
?   Javascript – How Prototypal Inheritance really works
    http://blog.vjeux.com/2011/javascript/how-prototypal-inheritance-really-
    works.html
?   JavaScript异步编程的Promise模式
    http://www.infoq.com/cn/news/2011/09/js-promise
?   通用JS时代的模块机制和编译工具 http://www.slideshare.net/dexter_yy/js-
    6228773
没了

More Related Content

What's hot (20)

React js
React jsReact js
React js
國昭 張
?
webpack 入門
webpack 入門webpack 入門
webpack 入門
Anna Su
?
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
Will Huang
?
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
taobao.com
?
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰
國昭 張
?
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
Eric Xiao
?
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
xwcoder
?
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
Johnson Gau
?
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang
?
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
Will Huang
?
Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0
智興 陳
?
Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)
beehivedata
?
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
Will Huang
?
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
Will Huang
?
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的packageNuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的package
Alan Tsai
?
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17
twMVC
?
6. 非同步設計
6. 非同步設計6. 非同步設計
6. 非同步設計
Justin Lin
?
Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Blazor 與 Radzen 同行
Blazor 與 Radzen 同行
Jimmy Ho
?
Asp.net mvc 概觀介紹
Asp.net mvc 概觀介紹Asp.net mvc 概觀介紹
Asp.net mvc 概觀介紹
Alan Tsai
?
并行、平行与非同步
并行、平行与非同步并行、平行与非同步
并行、平行与非同步
Justin Lin
?
webpack 入門
webpack 入門webpack 入門
webpack 入門
Anna Su
?
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
Will Huang
?
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
taobao.com
?
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰
國昭 張
?
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
Eric Xiao
?
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
xwcoder
?
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
Johnson Gau
?
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang
?
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
Will Huang
?
Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0
智興 陳
?
Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)
beehivedata
?
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
Will Huang
?
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
Will Huang
?
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的packageNuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的package
Alan Tsai
?
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17
twMVC
?
6. 非同步設計
6. 非同步設計6. 非同步設計
6. 非同步設計
Justin Lin
?
Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Blazor 與 Radzen 同行
Blazor 與 Radzen 同行
Jimmy Ho
?
Asp.net mvc 概觀介紹
Asp.net mvc 概觀介紹Asp.net mvc 概觀介紹
Asp.net mvc 概觀介紹
Alan Tsai
?
并行、平行与非同步
并行、平行与非同步并行、平行与非同步
并行、平行与非同步
Justin Lin
?

Viewers also liked (7)

Práctica 1 rae (norma medina)Práctica 1 rae (norma medina)
Práctica 1 rae (norma medina)
Norma Medina
?
TIddlywiki groep 5
TIddlywiki groep 5TIddlywiki groep 5
TIddlywiki groep 5
guestb1375
?
Paa Presentation
Paa PresentationPaa Presentation
Paa Presentation
MorganRose
?
WebResultsIntrotowebmarketing17may2012
WebResultsIntrotowebmarketing17may2012WebResultsIntrotowebmarketing17may2012
WebResultsIntrotowebmarketing17may2012
Rosey Broderick
?
2008 Balkans Peace Park Summer Program Development Projects
2008 Balkans Peace Park Summer Program Development Projects2008 Balkans Peace Park Summer Program Development Projects
2008 Balkans Peace Park Summer Program Development Projects
toddwalters33
?
Powerpoint Tiddlywiki
Powerpoint TiddlywikiPowerpoint Tiddlywiki
Powerpoint Tiddlywiki
guestb1375
?
Práctica 1 rae (norma medina)Práctica 1 rae (norma medina)
Práctica 1 rae (norma medina)
Norma Medina
?
TIddlywiki groep 5
TIddlywiki groep 5TIddlywiki groep 5
TIddlywiki groep 5
guestb1375
?
WebResultsIntrotowebmarketing17may2012
WebResultsIntrotowebmarketing17may2012WebResultsIntrotowebmarketing17may2012
WebResultsIntrotowebmarketing17may2012
Rosey Broderick
?
2008 Balkans Peace Park Summer Program Development Projects
2008 Balkans Peace Park Summer Program Development Projects2008 Balkans Peace Park Summer Program Development Projects
2008 Balkans Peace Park Summer Program Development Projects
toddwalters33
?
Powerpoint Tiddlywiki
Powerpoint TiddlywikiPowerpoint Tiddlywiki
Powerpoint Tiddlywiki
guestb1375
?

Similar to Javascript primer plus (20)

Kissy design
Kissy designKissy design
Kissy design
yiming he
?
美团前端架构介绍
美团前端架构介绍美团前端架构介绍
美团前端架构介绍
pan weizeng
?
闯蝉高级技巧
闯蝉高级技巧闯蝉高级技巧
闯蝉高级技巧
fool2fish
?
基于厂测尘蹿辞苍测框架下的快速公司级应用开发
基于厂测尘蹿辞苍测框架下的快速公司级应用开发基于厂测尘蹿辞苍测框架下的快速公司级应用开发
基于厂测尘蹿辞苍测框架下的快速公司级应用开发
mysqlops
?
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
?
介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用
Jerry Lin
?
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunner
Rack Lin
?
狈辞诲别.箩蝉在淘宝的应用实践
狈辞诲别.箩蝉在淘宝的应用实践狈辞诲别.箩蝉在淘宝的应用实践
狈辞诲别.箩蝉在淘宝的应用实践
taobao.com
?
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
Kai Cui
?
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
yiditushe
?
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
appollo0312
?
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
Jackson Tian
?
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
?
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
ArBing Xie
?
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
?
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
jay li
?
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
Qiangning Hong
?
美团前端架构介绍
美团前端架构介绍美团前端架构介绍
美团前端架构介绍
pan weizeng
?
闯蝉高级技巧
闯蝉高级技巧闯蝉高级技巧
闯蝉高级技巧
fool2fish
?
基于厂测尘蹿辞苍测框架下的快速公司级应用开发
基于厂测尘蹿辞苍测框架下的快速公司级应用开发基于厂测尘蹿辞苍测框架下的快速公司级应用开发
基于厂测尘蹿辞苍测框架下的快速公司级应用开发
mysqlops
?
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
?
介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用
Jerry Lin
?
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunner
Rack Lin
?
狈辞诲别.箩蝉在淘宝的应用实践
狈辞诲别.箩蝉在淘宝的应用实践狈辞诲别.箩蝉在淘宝的应用实践
狈辞诲别.箩蝉在淘宝的应用实践
taobao.com
?
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
Kai Cui
?
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
yiditushe
?
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
厂迟谤耻迟蝉+厂辫谤颈苍驳+贬颈产别谤苍补迟别整合教程
appollo0312
?
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
从无阻塞并行脚本加载(尝补产.箩蝉)到浏览器消息模型
Jackson Tian
?
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
?
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
ArBing Xie
?
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
?
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
jay li
?
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
Qiangning Hong
?

Javascript primer plus