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

, NFE
:
DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek
14 2023 .

, NFE

, JavaScript .

JavaScript . ?

JavaScript, .

, , , . , : / , .

name

.

, name:

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

alert(sayHi.name); // sayHi

, name . , , , :

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

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

. , . , :

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

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

, , .

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 , .

, ask question - handler.

, , . :

  • , , .
  • , - , .

handler , handler.length.

, , ( ), :

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

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

}

//   ,   
//   ,  
ask("?", () => alert('  '), result => alert(result));

- , length. JavaScript.

.

counter :

function sayHi() {
  alert("");

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

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

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

, , sayhi.counter = 0 counter . , counter let 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

, .

Named Function Expression

Named Function Expression, NFE Function Expressions, .

, Function Expression:

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

:

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

? "func"?

, Function Expression. "func" function Functional Declaration, .

.

sayHi():

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

sayHi(""); // , 

func, :

  1. .
  2. .

, sayHi "" who :

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

sayHi(); // , 

//     :
func(); // , func   (   )

func? , sayHi ?

:

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

, sayHi . , :

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

let welcome = sayHi;
sayHi = null;

welcome(); // ,   sayHi   !

, sayHi . sayHi, . sayHi null.

, Function Expression, .

, :

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

let welcome = sayHi;
sayHi = null;

welcome(); // ,  (  )

, "func" . ( ). , .

sayHi welcome. func , .

Function Declaration

, , Function Expression, Function Declaration. Function Declaration .

, , Function Declaration Named Function Expression.

.

:

  • name . , , JavaScript (, ).
  • length . , rest , .

Function Expression ( ), , Named Function Expression. , ,

. JavaScript .

. , jQuery , $. lodash _, _.clone, _.keyBy (. , ). , , , . .

, , .

: 5

makeCounter() , :

  • counter() ( ).
  • counter.set(value) value.
  • counter.decrease() 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. .
  3. , , ==. , , , .

:

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 .

:

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