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

NFE
:
DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek

NFE

.

.

.

. : / .

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

.

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

.

counter :

function sayHi() {
  alert("");

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

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

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

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

.

Function Expression

Function Expression NFE Function Expression .

Function Expression :

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

:

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

"func"

Function Expression . "func" function Function Declaration .

.

sayHi() :

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

sayHi("John"); // John 

func :

  1. .
  2. .

sayHi who "Guest" :

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

sayHi(); // Guest 

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

func sayHi

:

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

sayHi . :

let sayHi = function(who) {
  if (who) {
    alert(` ${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("Guest"); //     
  }
};

let welcome = sayHi;
sayHi = null;

welcome(); // (   ) Guest 

"func" . ( ). .

sayHi welcome . func .

Function Declaration

Function Expession Function Declaration. Function Declaration .

Function Declaration Function Expression .

.

:

  • name . .
  • length . .

Function Expression ( ) Function Expression . .

. .

. jQuery $ . lodash _ _.clone _keyBy ( ). . .

.

: 5

makeCounter() :

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

(sandbox) .

: . .

sandbox .

count counter . count .

function makeCounter() {
  let count = 0;

  function counter() {
    return count++;
  }

  counter.set = value => count = value;

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

  return counter;
}

sandbox.

: 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

: : .

sandbox .

  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 .

sandbox.


Web Proxy Viewer  |  New URL  |  Original Page