js function

함수 정의

function grm (a, b) {
  var c = a + b;
  return c; // 생략시 undefined 반환
}

함수 정의

function grm (a, b) {
  var c = a + b;
  return c; // 생략시 undefined 반환
}

grm(10, 20); // 성공
grm(10); // 성공
grm(); // 성공
grm(10, 20, 30, 40); // 성공

함수 정의

function grm(a, b) {
  if(a === undefined || b === undefined) {
    throw new Error(“인수 a, b 필요”);
  }
 
  return a + b;
}

가변 인수

function grm(a, b) {
  (a === arguments[0]); // true
  (b === arguments[1]); // true
  
  return arguments.length;
}
 
grm(10, 20); // 2
grm(); // 0
grm(10, 20, 30, 40); // 4

유사배열객체 == 유사배열

가변 인수

function add() {
  // var sum= 0; 
  // for(var i=0; i<arguments.length; i++) {
  //  sum += (typeof arguments[i] === 'number') ? arguments[i] : 0;
  // }
  // return sum;
  return Array.from(arguments)
 		.filter( i => typeof i === 'number')
                .reduce((a,b) => {return a+b});
}
 
add(); // 0
add(10, 20, 30); // 60
add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 55
add(1, 2, '3'); // 3

객체로서의 함수

// 아무것도 하지 않는 함수
function empty(x, y) { }
console.log(empty.length); // 2

함수의 속성 및 메소드

function grm() {}
 
grm.location = 'seoul';
console.log(grm.location); // seoul;

함수의 속성 및 메소드

function double(x) {
  if(!double.isCall) {
    double.isCall = true;
  } else {
    return undefined;
  }
 
  return x * x;
}
 
double(10); // 100
double(20); // undefined
double(30); // undefined

함수의 속성 및 메소드

function double(x) {
  double = function() {};
 
  return x * x;
}
 
double(10); // 100
double(20); // undefined
double(30); // undefined

함수의 속성 및 메소드

function double(x) {
  if(!double.callCount) {
    double.callCount = 1;
  } else {
    double.callCount++;
  }
 
  return x * x;
}
 
for(var i=1; i<=100; i++) {
  double(i);
}
 
console.log(double.callCount); // 100

함수에 포함된 함수

function grm() {
  function get() {
    return 100;
  }
 
  return get();
}
 
grm(); // 100
grm.get();

함수에 포함된 함수

function Grm(x) {
  this.x = x;
  this.getX = function () {
    return this.x;
  };
}
 
var grm = new Grm(10);
 
foo.getX(); // 10

this

function Grm1() {
  var x = 10;
}
 
function Grm2() {
  this.x = 10;
}
 
var grm1 = new Grm1();
var grm2 = new Grm2();
grm1.x; // undefined
grm2.x; // 10

메소드

function Grm() {
  this.getX = function() {
    return 10;
  };
 
  function getY() {
    return 20;
  };
}
 
var grm = new Grm();
 
grm.getX(); // 10
grm.getY(); // Error!

prototype

function Grm(x) {
  this.x = x;
}
 
var grm1 = new Grm(10);
var grm2 = new Grm(20);
 
grm1.x; // 10
grm2.x; // 20
grm1.y = 100;
grm1.y; // 100
grm2.y; // undefined
 
Grm.prototype.z = 1000;
 
grm1.z; // 1000
grm2.z; // 1000

1급 함수

// 변수에 할당한 함수
var grm = function grm() { … };
 
// 변수에 할당된 grm 함수 호출.
grm();

이름 없는 익명 함수

var grm = function(x) {
  return x * x;
};
 
grm(10); // 100

이름 없는 익명 함수

var grm1 = function grmName() { };
var grm2 = function() { };
 
console.log(grm1.name); // grmName
console.log(grm2.name); // 빈문자열

이름 없는 익명 함수

var grm = {
  age: 10,
  addAge: function() {
    this.age++;
  }
};

js function

By leejaemin

js function

  • 172