javascript语言-javascript核心实践
2015-09-16 22:50:05 0 举报
AI智能生成
参考书籍《javascript 核心及实践》
作者其他创作
大纲/内容
数组:JavaScript 内置的 Array 也是从 Object 上继承下来的
创建数组
var array = [];
子主题
join,连接数组元素为一个字符串:
连接多个数组为一个数组:concat
从数组中取出一定数量的元素,不影响数组本身:slice
闭包
函数内定义函数成为理所当然,如果在
函数 func 内部声明函数 inner,然后在函数外部调用 inner,这个过程即产生了一个闭包
闭包的用途
匿名自执行函数
缓存
实现封装
面向对象的 Javascript
原型继承
引用
JavaScript 中的引用始终指向最终的对象,而并非引
用本身 83页
封装
原型链上的方法,均为公开的
函数式的javascript
匿名函数
高阶函数
以一个或多个函数为参数的函数称之为高阶函数
闭包与柯里化
柯里化就是预先将函数的某些参数传入,得到
一个简单的函数,但是预先传入的参数被保存在闭包中
函数式编程风格
函数式编程的谓词(关系运算符,如大于,小于,等于的判断等),以及运算
(如加减乘数等)都会以函数的形式出现
函数式编程语言
与LISP
动态性
在一个 JavaScript 对象中,要为一个属性赋值,我们不必事先创建一个字段,
只需要在使用的时候做赋值操作即可
弱类型
数据类型
基本数据类型:字符串(string),数值(number),布
尔值(boolean),undefined,null 及对象(object)
对象类型
对象(属性的集合,即键值的散列表),数组(有序的列表),函数(包
含可执行的代码)
对象和数组的
界限并不那么明显(事实上它们是属于同一类型的),但是他们的行为却非常不同
基本类型与对象间的转换
基本数
据类型在做一些运算时,会临时包装一个对象,做完运算后,又自动释放该对象
对象转换为基本类型则是通过这样的方式:通过调用对象的 valueOf()方法来取得
对象的值,如果 valueOf 取不到值的话,则需要
调用对象的 toString()方法
所有的非空对象,在布尔值环境下,
都会被转成 true
类型的判断
typeof、instanceof
基本类型和引用类型
基本类型如数字,布尔值,
它们在内存中都有固定的大小,我们通过变量来直接访问基本类型的数据。 而对于引用类型,
如对象,数组和函数,由于它们的大小在原则上是不受任何限制的,故我们通过对其引用的
访问来访问它们本身
基本类型:var x = 1;//数字x,基本类型
var y = x;//数字y,基本类型
print(x);
print(y);
x = 2;//修改x的值
print(x);//x的值变为2
print(y);//y 的值不会变化
引用类型:var array = [1,2,3,4,5];
var arrayRef = array;
array.push(6);
print(arrayRef);引用指向的是地址,也就是说,引用不会指向引用本身,而是指向该引用所对应的实际对象
变量的作用域
在函数内 var 关键字是必须的,如果使用了变量而没有写 var 关键字,
则默认的操作是对全局对象的
对象与 JSON,JSON 是 JavaScript 中对象的字面量,是对象的表示方法
对象的属性
属性是由键-值对组成的,即属性的名字和属性的值。属性的名字是一个字符串,而值可以
为任意的 JavaScript 对象(JavaScript 中的一切皆对象,包括函数)
属性与变量
变量
其实就是属性
原型对象及原型链
通过使用原型,JavaScript 可以
建立其传统 OO 语言中的继承,从而体现对象的层次关系
this 指针:在 JavaScript 中,this 表示当前上下文,即调用者的
引用
,this 的值并非函数如何被声明而确定,而是被函数如何被调用而确定,这
一点与传统的面向对象语言截然不同
call 是 Function 内置对象上的一个方法
使用对象
通过 new 操作符作用于 Object 对象,构造一个新的对象,然后动态的添加属性,从
无到有的构建一个对象。
定义对象的“类” :原型,然后使用 new 操作符来批量的构建新的对象。
使用 JSON
JSON 的另一个应用场景是:当一个函数拥有多个返回值时,在传统的面向对象语言中,
我们需要组织一个对象,然后返回,而 JavaScript 则完全不需要这么麻烦
函数,函数本身也是对象
function p(){
print("invoke p by ()");
}
p.id = "func";
p.type = "function";
print(p);
print(p.id+":"+p.type);
print(p());
没有错,p 虽然引用了一个匿名函数(对象),但是同时又可以拥有属性,完全跟其他对象一
样,运行结果如下:
function (){
print("invoke p by ()");
}
func:function
invoke p by ()
函数的参数
你可以将任意多的参数传递给一个
函数,即使这个函数声明时并未制定形式参数
子主题
JavaScript 在处理函数的参数时,与其他编译型的语言不一样,解释器传递给函
数的是一个类似于数组的内部值,叫 arguments
函数作用域
词法作用域
其作用域为在定义时(词法分析时)就确定下来的,而并非在执行时确定
var str = "global";
function scopeTest(){
print(str);
var str = "local";
print(str);
}
scopeTest();而正确的结果应该是:
undefined
local
在词法分析结束后,构造作用域链的时候,会将函数内定义的
var 变量放入该链, 因此 str 在整个函数 scopeTest 内都是可见的(从函数体的第一行到最
后一行),由于 str 变量本身是未定义的,程序顺序执行
调用对象
函数上下文
通过
Function 对象上的 call 或者 apply 函数来修改函数的上下文
高级主题
原型链
JavaScript 对象是一个属性的集合,另外有一个隐式的对象:原
型对象。原型的值可以是一个对象或者 null
执行期上下文
执行器上下文的概念贯穿于 JavaScript引擎解释代码的全过程,这个概念是一个运行
的概念,执行器上下文一般实现为一个栈。
全局代码(游离于任何函数体之外),函数代码,以及 eval代码(eval接受字符串,
并对这个字符串求值,通常来讲,函数式编程都会提供这个函数或者类似的机制)。
全局上下文仅有一个,函数上下文和 eval上下文则
可能有多个
函数执行期上下文对象
。每个上下文对象所需要包含的有变量对象,作用域链以及 this
而在函数上
下文中,变量对象表现为活动对象
活动对象
子主题
作用域链
作用域链与原型链类似,也是一个对象组成的链,用以在上下文中查找标识符(变量,
函数等)。查找时也与原型链类似,如果激活对象本身具有该变量,则直接使用变量的值,
否则向上层搜索,一次类推,知道查找到或者返回 undefined
this
:this 是一
个特殊的对象,与执行期上下文相关,因此可以称之为上下文对象。this 是执行期上下文
对象的一个属性
词法作用域
词法作用域(静态作用域)是指,在函数对象的创建时,作用域”[[scope]]”就已经建立,
而并非到执行时,因为函数创建后可能永远不会被执行,但是作用域是始终存在的
0 条评论
下一页