- 函数式语言: 通过连续表达式运算求值的语言
- 函数是运算元
- 函数内保存数据
- 函数内的运算对函数外无副作用
- JS 中函数作为参数时,也是传递引用的,但没有地址的概念。由于彻底杜绝了地址运算,也就没有了地址运算的隐患。函数只有运算元的概念而没有地址概念。函数参数与普通参数没有什么不同。
- 函数内保持数据的特性叫闭包
- 函数式语言中,
函数
并不是精髓,真正的精髓是运算
,函数
只是封装运算
的一种手段。 - 对象的构造,函数与方法的调用,本质上是表达式运算。
- 如果用函数来模拟循环,必然面临一个问题,
栈溢出
。
- 递归中可以存在不占用栈的情况,就是
尾递归
。 -
尾递归
:在函数执行序列的最后一个表达式中出现递归调用,由于是最后一个表达式,当前函数不需要为下次调用保留上下文环境。 - JS的解释环境并不支持尾递归特性,因此函数递归将消耗大量内存。
- 值参与计算,变量其实是值的寄存。在函数式语言中,除了值声明和函数中的返回子句外,其他的语句都是可以被消灭的。
- 当运算符等义与某个函数时,JS就具有了函数式语言的概念。
- 不论从 arguments 还是形参,都可以修改入口参数的值。
- JS 中所有的东西都是值。
- 标识符优先级
- 内部函数名优于参数名
- 内部函数名与参数名优于arguments
- 内部函数名与参数名优于var变量声明
- 在执行期将直接量做表达式的时候,它没有了语法期命名的含义。所以(function object() {})等价于 (function () {})。
- JS动态语言特性
- 动态类型绑定
- 动态存储绑定
- 动态执行 eval
- 调用对象方法与普通函数没有本质的不同,唯一差异仅在与this引用。
- 构造器的原型创建自系统内部。是不可被外部覆盖的标识符Object,因此即使Object被重写,原型也总能被创建。
- 直接量声明总会调用内部对象系统来构建对象。构造器与直接量声明是两套系统。
- 发生存取运算时,值类型才会发生‘包装’
- 关联对象是实现对象系统的基础。
- JS中数组是关联数组,内存并不是连续分配的有序数组。但它可以表现的像索引数组。
- for()索引效率低于 for...in,因为for...in会是按索引数组的个数来处理的。
网友评论