函数声明
- 关键字 function
function 函数名(参数1,参数2......){
执行的代码
} - 匿名函数
var x = function () {} - 具名函数赋值给变量
var x = function y() {}
<!>这种声明下的y只能在函数内部访问,而function y() {}可以在外部访问到。 - window.Function对象
new Function ("参数1","参数2",...,"代码")
5.箭头函数
sum = (x+y)=>{x+y}
.name
.name方法返回函数名
- function animals () {}
animals.name = "animals" - var fruits = function () {}
fruits.name = "fruits" - special = new Function ()
special.name = "anonymous"
Function对象声明的函数.name输出的是匿名
函数的调用
函数的调用.png
f(1,2) <=> f.call(undefined,1,2)
call()的第一个参数可以用this得到
call()的第二个参数可以用arguments得到
call().png
undefined后面的参数,以伪数组的形式存放在arguments中。
call()第一个参数如果是undefined,那么在普通模式下,浏览器会将this打印为window,在严格模式下,this打印出undefined
伪数组:没有Array.prototype的API,它的--proto--直接指向object.prototype
Call Stack
调用栈—先进后出(后进先出)
在这里查看详细说明
Stack Overflow 栈溢出
递归的思想
作用域
函数就近调用变量,自身的范围没有就到父函数中找(看到代码,必须先进行变量提升)
闭包
如果一个函数使用了范围外的变量,那么这个变量+这个函数就叫做闭包