JavaScript – Function 函数


参考

阮一峰 – 函数的扩展

基本用法

function fn1(param1, param2 = 'default value') {
  return 'return value';
}

fn1('1');

 

JS 函数特色

no optional parameters

JS 的函数没有 optional parameters 的概念, 调用的时候如果没有传入参数, 那么参数值是 undefined

传入 undefined 相等于没有传入值, 如果有定义 default value 就会拿 default value 来用

always have return value

即使函数没有写任何 return, 最终都会 return undefined.

arguments 对象

因为参数完全没有被限制, 所以 JS 函数内有一个 arguments 对象, 可以动态的去检查最终传入的参数有多少,有哪些.

function fn1(param1, param2 = 'default value') {
  console.log(arguments.length);
  console.log(arguments[0]);
}

在 ES6 过后, 大部分人会用 rest parameters 取代 arguments 对象.

函数是一等公民

函数可以 assign to variables, 也可以当参数传来传去.

function method1(method2) {}

const method2 = function() {}
method1(method2);

函数里的 this

函数的 this depend on 调用它的对象.

函数在全局调用, 所以 this 指向 globalThis

function method1(thisRef) {
  console.log(this === thisRef);
}
method1(globalThis); // true

函数在某个对象中调用

const object1 = {
  method2: method1,
};
object1.method2(object1);

this 不在指向 globalThis, 而是指向调用它的 object1

通过 call 或 apply 控制 this 指向

function method1() {
  console.log(this.value); // value1
}

method1.call({ value: 'value1' });

call 可以直接给一个对象当作函数的 this.

相关