跳至主要內容

JavaScript function 函数对象-数据类型

h7ml大约 1 分钟约 410 字

JavaScript function 函数对象-数据类型

  • 函数分类
    • 普通命名函数
    • 通过名字调用执行
function fn() {}
  • 事件处理函数
    • 可以是匿名函数也可以是匿名函数,通过元素对象的事件触发来执行
btn.onclick = function () {};
  • 构造函数
    • 通过 new 运算符来执行
function Person() {}
new Person();
  • 回调函数
    • 在主函数中满足一定条件调用执行 匿名函数也可以是命名函数
  • 表达式函数:将一个函数 赋值给一个变量 通过函数名的调用执行
var a = function () {};
  • 匿名函数:闭包
(function (name) {
  console.log(name);
  return 'aaa';
})('mark');
// 或者
+(function (name) {
  console.log(name);
})('mark');
// 或者
!(function (name) {
  console.log(name);
})('mark');

callee 与 caller

function a() {
  console.log(arguments.callee); // 当前函数
  console.log(a.caller); // 真正调用此函数的函数
}

改变 this 指向

fn.call(obj,a,b,c...);// 多个参数
fn.apply(obj,[a,b,c...]);// 两个参数,第二个为数组
fn.bind(obj,a,b,c...);// 与 call 一样,返回的是函数本身

注意第一个参数传 null 为不改变 this 指向 :::

函数的 length 属性

(function (a) {})
  .length(
    // 1
    function (a = 5) {}
  )
  .length(
    // 0
    function (a, b, c = 5) {}
  )
  .length(
    // 2 有一个默认值, 3-1 = 2

    // 数值为参数的长度,但指定了默认值 length 属性将失真
    function (...args) {}
  )
  .length(
    // 0

    // 如果设置了默认值的参数不是尾参数,那么 length 属性也不再计入后面的参数了。
    function (a = 0, b, c) {}
  )
  .length(
    // 0
    function (a, b = 1, c) {}
  ).length; // 1

name 属性

function foo() {}
foo.name(
  // "foo"
  // 构造函数 name 为构造出来对象下的值
  new Function()
);