[ Web Proxy ]
URL:
Viewing: https://zh.javascript.info/function-object [Back]  [Original]

NFE
:
Light themeDark theme
DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek

NFE

JavaScript

JavaScript

JavaScript

action object/

name

name

function sayHi() {
  alert("Hi");
}

alert(sayHi.name); // sayHi

let sayHi = function() {
  alert("Hi");
};

alert(sayHi.name); // sayHi

function f(sayHi = function() {}) {
  alert(sayHi.name); // sayHi
}

f();

let user = {

  sayHi() {
    // ...
  },

  sayBye: function() {
    // ...
  }

}

alert(user.sayHi.name); // sayHi
alert(user.sayBye.name); // sayBye

name

// 
let arr = [function() {}];

alert( arr[0].name ); // <>
// 

length

length

function f1(a) {}
function f2(a, b) {}
function many(a, b, ...more) {}

alert(f1.length); // 1
alert(f2.length); // 2
alert(many.length); // 2

rest

length /introspection

ask question handler ...handlers

handlers handlers

handler handler.length

handler handler

function ask(question, ...handlers) {
  let isYes = confirm(question);

  for(let handler of handlers) {
    if (handler.length == 0) {
      if (isYes) handler();
    } else {
      handler(isYes);
    }
  }

}

//  handler 
//  handler 
ask("Question?", () => alert('You said yes'), result => alert(result));

length JavaScript

counter

function sayHi() {
  alert("Hi");

  // 
  sayHi.counter++;
}
sayHi.counter = 0; // 

sayHi(); // Hi
sayHi(); // Hi

alert( `Called ${sayHi.counter} times` ); // Called 2 times

sayHi.counter = 0 counter counter let counter

counter

function makeCounter() {
  // 
  // let count = 0

  function counter() {
    return counter.count++;
  };

  counter.count = 0;

  return counter;
}

let counter = makeCounter();
alert( counter() ); // 0
alert( counter() ); // 1

count

count

function makeCounter() {

  function counter() {
    return counter.count++;
  };

  counter.count = 0;

  return counter;
}

let counter = makeCounter();

counter.count = 10;
alert( counter() ); // 10

NFENamed Function Expression

let sayHi = function(who) {
  alert(`Hello, ${who}`);
};

let sayHi = function func(who) {
  alert(`Hello, ${who}`);
};

"func"

function "func"

sayHi()

let sayHi = function func(who) {
  alert(`Hello, ${who}`);
};

sayHi("John"); // Hello, John

func

sayHi who "Guest"

let sayHi = function func(who) {
  if (who) {
    alert(`Hello, ${who}`);
  } else {
    func("Guest"); //  func 
  }
};

sayHi(); // Hello, Guest

// 
func(); // Error, func is not defined

func sayHi

let sayHi = function(who) {
  if (who) {
    alert(`Hello, ${who}`);
  } else {
    sayHi("Guest");
  }
};

sayHi

let sayHi = function(who) {
  if (who) {
    alert(`Hello, ${who}`);
  } else {
    sayHi("Guest"); // Error: sayHi is not a function
  }
};

let welcome = sayHi;
sayHi = null;

welcome(); // Error sayHi 

sayHi sayHi sayHi null

let sayHi = function func(who) {
  if (who) {
    alert(`Hello, ${who}`);
  } else {
    func("Guest"); // 
  }
};

let welcome = sayHi;
sayHi = null;

welcome(); // Hello, Guest

func

sayHi welcome func

  • name JavaScript
  • length Rest

Named Function Expression

JavaScript

jQuery $ lodash _ _.add_.keyBy docs

: 5

makeCounter() counter

  • counter()
  • counter.set(value) count value
  • counter.decrease() count 1

P.S.

count counter count

function makeCounter() {
  let count = 0;

  function counter() {
    return count++;
  }

  counter.set = value => count = value;

  counter.decrease = () => count--;

  return counter;
}

: 2

sum

sum(1)(2) == 3; // 1 + 2
sum(1)(2)(3) == 6; // 1 + 2 + 3
sum(5)(-1)(2) == 6
sum(6)(-1)(-2)(-3) == 0
sum(0)(1)(2)(3)(4)(5) == 15

P.S.

  1. sum
  2. ==

function sum(a) {

  let currentSum = a;

  function f(b) {
    currentSum += b;
    return f;
  }

  f.toString = function() {
    return currentSum;
  };

  return f;
}

alert( sum(1)(2) ); // 3
alert( sum(5)(-1)(2) ); // 6
alert( sum(6)(-1)(-2)(-3) ); // 0
alert( sum(0)(1)(2)(3)(4)(5) ); // 15

sum f

f currentSum f

f

function f(b) {
  currentSum += b;
  return f(); // <-- 
}

function f(b) {
  currentSum += b;
  return f; // <-- 
}

f toString currentSum Symbol.toPrimitive valueOf


Web Proxy Viewer  |  New URL  |  Original Page