JS函数

函数声明

  1. 关键字 function
    function 函数名(参数1,参数2......){
    执行的代码
    }
  2. 匿名函数
    var x = function () {}
  3. 具名函数赋值给变量
    var x = function y() {}
    这种声明下的y只能在函数内部访问,而function y() {}可以在外部访问到。
  4. 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 栈溢出

递归的思想

作用域

函数就近调用变量,自身的范围没有就到父函数中找(看到代码,必须先进行变量提升)

闭包

如果一个函数使用了范围外的变量,那么这个变量+这个函数就叫做闭包

你可能感兴趣的:(JS函数)