参考
基本用法
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.