1. 最简单的声明方法,具名函数
function x(输入1, 输入2...) {
return undefined
}

function 是关键字,和 var 一样,var 是声明一个变量,funciton 是声明一个函数。变量和函数的差别是,变量有 7 种数据类型(string,number,null,undefined,boolean,symbol,object),而 function 声明一个函数,那么这个变量就只能是一个函数,也就是 object 数据类型,function 是特殊的 var,变量的特例。

x 是函数的名字,名字可以用来 console.log(x) 输出这个函数,console.log 的参数只支持字符串,如果这个 x 不是字符串,console.log 会自动把 x 的值调用 toString 方法。

function x(input1, input2) {return undefined}
x.toString() // "function x(input1, input2) {return undefined}"
console.log(x) // f x(input1, input2) {return undefined}

不要相信 Chrome 打印出来的东西

console.log("1") // 1

Chrome 打印出来的是数值 1,而应该是字符串“1”。console.log 永远返回 undefined。打印的并不是返回值。

x 的返回值默认会带上 return undefined,如果没有 return 的话。因为一个函数必须要有一个终止语句,所以就算不写 return,函数也会自动带上 return undefined。

  1. 匿名函数
function (input1, input2) { return undefined }

不能单独使用,必须赋给另外一个变量。

var x
x = function (input1, input2) { return undefined }
  1. 具名函数赋值给一个变量
var x = function y(input1, input2) {return undefined}

y 的作用域只在函数体内。

var x = function y(input1, input2) {return undefined}
console.log('y') // 会报错,找不到 y

第 3 种和第 1 种的语法一样,但是 y 的体现不一致,这也是 JavaScript 的垃圾之处。

  1. window.Function 函数对象
var f = new Funtion('x', 'y', 'return x + y')
var n = 1
var f = new Function('x', 'y', 'return x' + n + 'y')
f(1, 2) // 4

所有的参数都是字符串,然后字符串是可以拼接的。

  1. 箭头函数

箭头函数是匿名函数!

var f = (x, y) => { return x + y }

如果花括号内只有一个语句,可以去掉花括号和 return

var f = (x, y) => x + y

如果参数只有一个,则不需要小括号

var f = x => x**2

函数的名字的坑

function f() {}
f.name // "f"
var f2 = function(){}
f2.name // "f2"
var f3 = function f4(){}
f3.name // "f4"
var f5 = new Function('x', 'y', 'return x+y')
f5.name // "anonymous"