伯乐在线注:本文来自文章作者 @freestyle21 的投稿。
前言
在JavaScript中,作用域、上下文、闭包、函数等算是精华中的精华了。对于初级JSer来说,是进阶必备。对于前端攻城师来说,只有静下心来,理解了这些精华,才能写出优雅的代码。
本文旨在总结容易忘记的重要知识,不会讲基本的概念。如果对基本知识不太熟悉,就去翻下《Javascript权威指南》吧~
参考文章如下(建议读者朋友用chrome看这些文章吧,不然的话会错过很多精彩哦~):
http://dmitrysoshnikov.com/ecmascript/chapter-1-execution-contexts/
http://benalman.com/news/2010/11/immediately-invoked-function-expression/
http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
语言特性
函数表达式
先看代码段:
1 2 3 4 5 6 |
var f = function foo(){ return typeof foo; // foo是在内部作用域内有效 }; // foo在外部用于是不可见的 typeof foo; // "undefined" f(); // "function" |
json
很多JavaScript开发人员都错误地把JavaScript对象字面量(Object Literals)称为JSON对象(JSON Objects)。 JSON是设计成描述数据交换格式的,它也有自己的语法,这个语法是JavaScript的一个子集。
{ “prop”: “val” } 这样的声明有可能是JavaScript对象字面量,也有可能是JSON字符串,取决于什么上下文使用它。如果是用在string上下文(用单引号或双引 号引住,或者从text文件读取)的话,那它就是JSON字符串,如果是用在对象字面量上下文中,那它就是对象字面量。
1 2 3 4 5 |
// 这是JSON字符串 var foo = '{ "prop": "val" }'; // 这是对象字面量 var bar = { "prop": "val" }; |
原型
1 2 3 4 5 6 7 8 9 10 11 |
function Animal (){ // ... } function cat (){ // ... } cat.prototype = new Animal();//这种方式会继承构造函数里面的。 cat.prototype = Animal.prototype;//这种方式不会继承构造函数里面的。 //还有一个重要的细节需要注意的就是一定要维护自己的原型链,新手总会忘记这个! cat.prototype.constructor = cat; |
1 2 3 4 5 6 7 8 |
function A() {} A.prototype = { x: 10 }; var a = new A(); alert(a.x); // 10 alert(a.constructor === A); // false! |
1 2 3 4 5 6 7 8 9 |
function A() {} A.prototype = { constructor: A, x: 10 }; var a = new A(); alert(a.x); // 10 alert(a.constructor === A); // true |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
要知识,不会讲基本的概念。如果对基本知识不太熟悉,就去翻下《Javascript权威指南》吧~
参考文章如下(建议读者朋友用chrome看这些文章吧,不然的话会错过很多精彩哦~): http://dmitrysoshnikov.com/ecmascript/chapter-1-execution-contexts/ http://benalman.com/news/2010/11/immediately-invoked-function-expression/ http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
语言特性函数表达式先看代码段:
json很多JavaScript开发人员都错误地把JavaScript对象字面量(Object Literals)称为JSON对象(JSON Objects)。 JSON是设计成描述数据交换格式的,它也有自己的语法,这个语法是JavaScript的一个子集。 { “prop”: “val” } 这样的声明有可能是JavaScript对象字面量,也有可能是JSON字符串,取决于什么上下文使用它。如果是用在string上下文(用单引号或双引 号引住,或者从text文件读取)的话,那它就是JSON字符串,如果是用在对象字面量上下文中,那它就是对象字面量。
原型
|