何为函数?
函数是可以重复执行的代码块。
函数是一段JavaScript 代码,它只定义一次,但可被执行或调用任意次。
在JavaScript 中,任意函数都是Function 的实例。
函数定义的方式:
1.声明式函数定义: function 函数名 (){};
这种定义方式,会将函数声明提升到该函数所在作用域的最开头,在这个函数作用域内,在任意位置都可以调用这个函数。
2.函数表达式:var fun = function(){};
此方式定义的函数,只能在该作用域中,这段赋值代码执行之后才能通过fun()调用函数,否则,由于变量声明提升,fun === undefined。
3.Lambda 表达式(箭头函数):var f = v => v;
var f = () => 5; // 等同于 var f = function () { return 5 }; var sum = (num1, num2) => num1 + num2; // 等同于 var sum = function(num1, num2) { return num1 + num2; };
4.new Function 形式: var fun1 = new Function (arg1 , arg2 ,arg3 ,…, argN , body );
此方式很少用到,因为任意函数都是Function 的实例,所以可以通过new Function 创建实例对象。Function构造函数参数都是字符串类型。除了最后一个参数, 其余的参数都作为生成函数的参数即形参。最后一个参数, 表示的是要创建函数的函数体(即函数内部需要执行的代码)。
例:
var 函数名 = new Function(“参数1”,”参数2”,”参数3”……”函数体”); 如: var 函数名 = new Function("x","y","var z=x+y;return z;");
箭头函数简化了函数的写法,表达式比较简洁,且当有多个参数时可以与变量解构赋值一起使用,需要注意的是,在函数中this
对象的指向是可变的,但是在箭头函数中,this的指向是固定的。
总结:函数的几种定义方式其实都是最后一种new Function 的语法糖,当我们定义函数时候都会通过 new Function 来创建一个实例函数,前三种方法只是进行了不同形式的封装。
补充:对象里的方法
如果有一个函数是在一个对象里,一般我们称这种函数是对象的一个方法(method)。
var obj = { greet: function (greeting, name) { return `${greeting}, ${name}` } } //ES6 可以按下面的方式给对象定义方法: var obj = { greet (greeting, name) { return `${greeting}, ${name}` } }