Javascript函数

函数

函数的创建方式

  1. 函数通常以函数声明的方式定义(注意函数定义最后没有加分号)
function sum (num1, num2) { 
 return num1 + num2; 
}
  1. 定义了一个变量并将其初始化为一个函数
let sum = function(num1, num2) { 
 return num1 + num2; 
};
  1. 箭头函数
let sum = (num1, num2) => { 
 return num1 + num2; 
}; 

箭头函数

  1. 参数只有一个时,可以不写小括号

  2. 可以不用大括号,但这样会改变函数的行为

  3. 箭头函数不能使用 arguments、super 和 new.target,也不能用作构造函数。此外,箭头函数也没有 prototype 属性。

函数中的参数

  1. ECMAScript 函数的参数在内部表现为一个数组。

  2. arguments 对象是一个类数组对象(但不是 Array 的实例),因此可以使用中括号语法访问其中的
    元素。

  3. arguments 对象的另一个有意思的地方就是,它的值始终会与对应的命名参数同步。

  4. 在使用默认参数时,arguments 对象的值不反映参数的默认值,只反映传给函数的参数。

箭头函数中的参数

如果函数是使用箭头语法定义的,那么传给函数的参数将不能使用 arguments 关键字访问,而只能通过定义的命名参数访问。

默认参数值

在 ECMAScript5.1 及以前,实现默认参数的一种常用方式就是检测某个参数是否等于 undefined,
如果是则意味着没有传这个参数,那就给它赋一个值。ECMAScript 6 之后就不用这么麻烦了,因为它支持显式定义默认参数了。

function makeKing(name = 'Henry') { 
 return `King ${name} VIII`; 
}

默认参数值并不限于原始值或对象类型,也可以使用调用函数返回的值。函数的默认参数只有在函数被调用时才会求值,不会在函数定义时求值。箭头函数同样也可以这样使用默认参数,只不过在只有一个参数时,就必须使用括号而不能省略了。

let romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI']; 
let ordinality = 0; 
function getNumerals() { 
 // 每次调用后递增
 return romanNumerals[ordinality++]; 
} 
function makeKing(name = 'Henry', numerals = getNumerals()) { 
 return `King ${name} ${numerals}`; 
} 
console.log(makeKing()); // 'King Henry I' 
console.log(makeKing('Louis', 'XVI')); // 'King Louis XVI' 
console.log(makeKing()); // 'King Henry II' 
console.log(makeKing()); // 'King Henry III'

默认参数作用域与暂时性死区

在求值默认参数时可以定义对象,也可以动态调用函数,所以函数参数肯定是在某个作用域中
求值的。

参数是按顺序初始化的,所以后定义默认值的参数可以引用先定义的参数。

你可能感兴趣的:(javascript,开发语言,ecmascript)