js函数
- 箭头函数不能使用 arguments、super 和 new.target,也不能用作构造函数。此外,箭头函数也没有 prototype 属性。
- 函数名就是指向函数的指针,所以它们跟其他包含对象指针的变量具有相同的行为。
- 使用 function 关键字定义(非箭头)函数时,可以在函数内 部访问 arguments 对象,从中取得传进来的每个参数值。
- arguments 对象的另一个有意思的地方就是,它的值始终会与对应的命名参数同步。但这并不意味着它们都 访问同一个内存地址,它们在内存中还是分开的,只不过会保持同步而已
- 如果只传了一个参数,然后把 arguments[1]设置为某个值,那么这个值并不会反映到第二个命名参数。这是 因为 arguments 对象的长度是根据传入的参数个数,而非定义函数时给出的命名参数个数确定的。
- ECMAScript 中的所有参数都按值传递的。不可能按引用传递参数。如果把对象作 为参数传递,那么传递的值就是这个对象的引用。
- ECMAScript 中定义了两个同名函数,则后定义的会覆盖先定义的
- arguments 对象的值不反映参数的默认值,只反映传给函数的参数
- 非严格模式下,arguments 和参数的值同步修改,除非参数undefined,严格模式下,arguments 和参数的值不会同步,互不影响
- 可以把函数作为参数传给另一个函数,而且还可以在一个函数中返回另一个函数
- arguments 对象其实还有一个 callee 属性,是一个指向 arguments 对象所在函数的 指针
- 箭头函数中的 this 会保留定义该函数时的上下文
- caller属性引用的是调用当前函数的函数。通过函数本身调用,可以直接获取使用该函数的函数体代码,如果是window则返回null,亦可使用arguments.callee.caller降低耦合性
- 在严格模式下访问 arguments.callee 会报错。ECMAScript 5 也定义了 arguments.caller,但 在严格模式下访问它会报错,在非严格模式下则始终是 undefined。这是为了分清 arguments.caller 和函数的 caller 而故意为之的。
- ECMAScript 6 新增了检测函数是否使用 new 关键字调用的 new.target 属性。如果函数是正常调用的, 则 new.target 的值是 undefined;如果是使用 new 关键字调用的,则 new.target 将引用被调用的 构造函数。
- 在严格模式下,调用函数时如果没有指定上下文对象,则 this 值不会指向 window。 除非使用 apply()或 call()把函数指定给一个对象,否则 this 的值会变成 undefined。
- 闭包指的是那些引用了另一个函数作用域中变量的函数,通常是在嵌套函数中实现的。
浪波激泥