1.匿名函数
//调用函数
var x = function (a, b) {return a * b}; //匿名函数,即没有名称的函数
var z = x(4, 3); //在函数表达式存储在变量后,变量也可作为一个函数使用
2.Function() 构造函数
通过内置的 JavaScript 函数构造器(Function())定义函数。
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
3.自调用函数
如果表达式后面紧跟 () ,则会自动调用。
不能自调用声明的函数。
通过添加括号,来说明它是一个函数表达式:
(function () {
var x = "Hello!!"; // 我将调用自己
})();
4.函数是对象,有属性和方法。
5.箭头函数
ES6 新增了箭头函数。
(参数1, 参数2, …, 参数N) => { 函数声明 }
(参数1, 参数2, …, 参数N) => 表达式(单一)
// 相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
当只有一个参数时,圆括号是可选的:
(单一参数) => {函数声明}
单一参数 => {函数声明}
没有参数的函数应该写成一对圆括号:
() => {函数声明}
// ES5
var x = function(x, y) {
return x * y;
}
// ES6
const x = (x, y) => x * y;
有的箭头函数都没有自己的 this。 不适合顶一个 对象的方法。
当我们使用箭头函数的时候,箭头函数会默认帮我们绑定外层 this 的值,所以在箭头函数中 this 的值和外层的 this 是一样的。
箭头函数是不能提升的,所以需要在使用之前定义。
使用 const 比使用 var 更安全,因为函数表达式始终是一个常量。
如果函数部分只是一个语句,则可以省略 return 关键字和大括号 {},这样做是一个比较好的习惯:
const x = (x, y) => { return x * y };
箭头函数不需要使用 function、return 关键字及大括号 {}。
IE11 及更早 IE 版本不支持箭头函数。
关于箭头函数的this
function a() {
return () => {
return () => {
console.log(this)
}
}
}
console.log(a()()())
注意:箭头函数其实是没有 this 的,这个函数中的 this 只取决于他外面的第一个不是箭头函数的函数的 this。在这个例子中,因为调用 a 符合前面代码中的第一个情况,所以 this 是 window。并且 this 一旦绑定了上下文,就不会被任何代码改变。
6.函数参数
7.函数调用
8.闭包
9.函数式编程
10.立即执行函数IIFE
立即执行函数中,this没有进行绑定指向,自然从属于window