摘要:尾调用优化(Tail Call Optimization) 尾调用是指函数的最后一条语句是函数调用,比如下面的代码: 在ES5中,尾调用和其他形式的函数调用一样:脚本引擎创建一个新的函数栈帧并且压在当前调用的函数的栈帧上面。也就是说,在整个函数栈上,每一个函数栈帧都会被保存,这有可能造成调用栈占用内
阅读全文
摘要:块级函数(Block-Level Functions) 在ES3及以前,在块内声明一个函数会报语法错误,但是所有的浏览器都支持块级函数。不幸的是,每个浏览器在支持块级函数方面都有一些细微的不同的行为。所以开发者最好不要在块内声明函数。为了解决浏览器在块内支持声明函数时带来的兼容性问题,在ES5中可以
阅读全文
摘要:明确函数的双重作用(Clarifying the Dual Purpose of Functions) 在ES5及更早的ES版本中,函数调用时是否使用new会有不同的作用。当使用new时,函数内的this指向一个新对象并且函数会返回这个对象。看下面的代码: 一个自然的问题就是:如何判断函数调用时有没
阅读全文
摘要:名字属性(The name Property) 在JavaScript中识别函数是有挑战性的,因为你可以使用各种方式来定义一个函数。匿名函数表达式的流行使用导致函数调试困难,在栈信息中难以找出函数名。因为这些原因,ES6为所有函数都增加了名字属性。 选择合适的名字(Choosing Appropri
阅读全文
摘要:箭头函数(Arrow Functions) 就像名字所说那样,箭头函数使用箭头(=>)来定义函数。与传统函数相比,箭头函数在多个地方表现不一样。 箭头函数语法(Arrow Function Syntax) 箭头函数有多种实现方法。比如你想实现一个只有一个参数并且直接返回此参数值的函数: 上面的例子中
阅读全文
摘要:增强的Function构造函数(Increased Capabilities of the Function Constructor) 在Javascript中Function构造函数可以让你创建一个新函数,不过这个功能并不经常使用。Function构造函数接收函数参数和函数体作为参数,参数都必须是
阅读全文
摘要:使用未命名参数(Working with Unnamed Parameters) JavaScript并不限制传递给函数的实参个数,你可以总是传递比形参个数多或者少的实参。在ES6中当向函数传递比形参个数少的实参时,就会使用默认参数值。当向函数传递比形参个数多的实参时,ES6同样有对应的方案使用。来
阅读全文
摘要:对于任何语言来说,函数都是一个重要的组成部分。在ES6以前,从JavaScript被创建以来,函数一直没有大的改动,留下了一堆的问题和很微妙的行为,导致在JavaScript中使用函数时很容易出现错误并且可能需要多余的代码实现一些基本的函数行为。在ES6中,函数有一个质的飞跃的改进,它充分考虑到过去
阅读全文
摘要:变量声明一直是JavaScript中一个需要技巧的部分。在大多数基于C的编程语言中,变量(更正式地说是绑定)在声明的时候创建,然而在JavaScript中并不是这样。在JavaScript中,变量在何处创建取决于你用什么方式声明它。ES6提供了新的声明方式,让你可以更容易控制变量的作用域。接下来将说
阅读全文