变量、作用域
基本类型和引用类型
基本类型:值保存
* Undefined、Null、Boolean、Number 和 String
对象类型:引用保存,可以增加动态属性
* Object
执行环境及作用域
- 每个函数有一个执行环境
- 嵌套的执行环境构成作用域链
- 标识符解析沿着作用域链一层层搜索
- try-catch 会创建作用域
- with会创建作用域
- 没有块级作用域
函数
- 函数是对象
- 没有重载 :
以 像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回 - 函数声明 VS 函数表达式
解析器会率先读取函数声明,并使其在执行 9 任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真 正被解释执行 - 函数内部属性
arguments
arguments.callee
this:this 引用的是函数据以执行的环境对象——或者也可以说是 this 值(当在网页的全局作用域中调用函数时, this 对象引用的就是 window)
caller:ECMAScript 5 也规范化了另一个函数对象的属性 - 函数属性&方法
length:希望接收的命名参数的个数
prototype:对于 ECMAScript 中的引用类型而言,prototype 是保存它们所有实例方法的真正所在。换句话说,诸如 toString()和 valueOf()等方法实际上都保存在 prototype 名下,只不过是通过各自对象的实例访 问罢了。在创建自定义引用类型以及实现继承时,prototype 属性的作用是极为重要的(第 6 章将详 细介绍)。在 ECMAScript 5 中,prototype 属性是不可枚举的,因此使用 for-in 无法发现。
apply()和 call():在特定的作 用域中调用函数,实际上等于设置函数体内 this 对象的值。首先,apply()方法接收两个参数:一个 是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是 Array 的实例
在严格模式下,未指定环境对象而调用函数,则 this 值不会转型为 window。 除非明确把函数添加到某个对象或者调用 apply()或 call(),否则 this 值将是 undefined。
- 单体内置对象
Global:属于任何其他对象的属性和方法,最终都是它的属性和方法。事实上,没有全 局变量或全局函数;所有在全局作用域中定义的属性和函数,都是 Global 对象的属性。encodeURI、encodeURIComponent、eval、window
面向对象
?????
函数表达式
函数声明 VS 函数表达式
函数声明
- 函数声明提升,执行代码之前先读取函数声明
函数表达式
- 表达式是匿名函数,结果是一个值,可以赋予变量
递归
“`javascript
““
闭包
概念
有权访问另一个函数作用域中变量的函数。
创建闭包常见的方式,是在一个函数内部创建另一个函数。