(27)進階:函式
函式的五種宣告方式
1.具名函式
function f(x,y){
return x+y
}
f.name // 'f'
2.匿名函式
var f
f = function(x,y){ //匿名函式必須賦值一個變數
return x+y
}
f.name // 'f'
3.具名函式賦值
var f
f = function f2(x,y){ return x+y } //f是函式,f2是未定義的
f.name // 'f2'
console.log(f2) // undefined
4.window.Function //Function是函式物件
var f = new Function('x','y','return x+y')
f.name // "anonymous"
n = 1
new Function('x','y','return x+'+n+'y')
f(1,2) //4
5.箭頭函式
var f = (x,y) => {
return x+y
}
var sum = (x,y) => x+y
var n2 = n => n*n
f = (x,y) => {
var n = x * 3
var m = y * 2
return n+m
}
函式的name屬性
函式的本質
f(1,2) = f.call(undefined,1,2)
this 和 arguments
function f(){
'use strict' //嚴格模式下 this為call的第一個引數 如果是在普通模式下 this會被當成window
console.log(this)
console.log(arguments)
return undefined
}
f.call(1,2,3) // this 為 1,arguments 為 [2,3]
call stack 呼叫棧
作用域
搜尋 方應杭 閉包