제 5장 (4): Function

3336 단어

Function 유형


함수 즉 대상, 함수 이름 즉 지침.각 함수는 Function 유형의 인스턴스입니다.함수 이름은 함수를 가리키는 바늘이다.
함수 만들기
함수를 만드는 데는 세 가지 방식이 있다.함수 성명, 함수 표현식과 구조 함수를 통해 생성됩니다.
/**
 *  
 * */
//  
function test1(x, y) {
  return x + y
}

//  
var test2 = function (x, y) {
  return x + y
}

//  
var test3 = new Function("x", "y", "return x + y")
console.log(test1(10, 20))  // 30
console.log(test2(10, 20))  // 30
console.log(test3(10, 20))  // 30

함수 이름 바늘
/**
 *  , 
 */
function add(x, y) {
  console.log(x + y)
}
var calc = add
calc(1 , 2) // 3
calc = null   //  
console.log(add(1, 2))  // 3

함수 성명과 함수 표현식
함수 성명이 앞당겨져서 함수 성명에서 호출할 수 있습니다.함수 표현식이 앞당겨지지 않습니다.함수 표현식 성명 후에야 호출할 수 있습니다.작업 중에는 일반적으로 먼저 성명하고 나중에 호출한다.
/**
 *  , 
 */
getName(' ')  //  , 。     
function getName(name) {
  console.log(' ' + name, ' ')
}

//  getSay(' , ') //  。   Uncaught TypeError: getSay is not a function
var getSay = function (say) {
  console.log(say)
}
getSay(' , ') //  , 

값으로서의 함수
함수 이름 자체가 변수이기 때문에 값으로도 사용할 수 있다.
/**
 *  
 */
function rank(key) {
  return function (pre, next) {
    var preValue = pre[key]
    var nextValue = next[key]
    return preValue - nextValue
  }
}

var data = [
  {name: ' ',comment: ' ',id: 2},
  {name: ' ',comment: ' ',id: 1},
  {name: '  ',comment: '  ',id: 4},
  {name: ' ',comment: ' ',id: 3}
]

data.sort(rank('id'))
console.log(JSON.stringify(data)) // [{"name":" ","comment":" ","id":1},{"name":" ","comment":" ","id":2},{"name":" ","comment":" ","id":3},{"name":"  ","comment":"  ","id":4}]


this
this는 실행 환경의 대상을 인용합니다.누가 그것을 호출하면 그것은 누구를 가리킨다.함수의 호출 방식은 다음과 같은 몇 가지가 있다.
//  
var source = 'window'
function getSource() {
  console.log(this.source)
}
getSource() // window ( , this window)
//  
var userName = ' '
var person = {
  userName: ' ',
  say: function () {
    console.log(this.userName + ' ')
  }
}
person.say()  //   (this person)
var say = person.say  
console.log(say()) //   (this window)
// 
function Biography(name) {
  this.name = name
}
let bg = new Biography(' ')
console.log(bg.name)  //  

call() 및 apply()
이 두 가지 방법은this의 지향 대상을 바꿀 수 있다.
/**
 * call() apply()
 *  this 。
 * call , 
 * apply , 。( )
 */

var name = 'window'
var obj1 = {
  name: 'obj1'
}

var obj2 = {
  name: 'obj2'
}

function fun(msg) {
  console.log(this.name, ' ', msg)
}

fun('hello')  // window   hello
fun.call(obj1, 'hello') // obj1   hello
fun.apply(obj2, ['hello'])  // obj1   hello

bind
bind 방법은 함수의 작용역을 귀속할 수 있다
/**
 * bind  this 
 */
color = 'red'
var obj3 = {
  color: 'yellow'
}

function getColor() {
  console.log(this.color)
}

var getC = getColor.bind(obj3)
getC()  // yellow

인용하다


javascript 고급 프로그램 설계

좋은 웹페이지 즐겨찾기