js函数

作者: fanison | 来源:发表于2019-12-17 21:17 被阅读0次

    定义函数

    • 具名函数
    function 函数名(形式参数1,形式参数2){
        语句
        return 返回值
    }
    
    • 匿名函数
    let a = function(x,y){ return x+y }
    

    注意fn2()作用域为 = 右侧

    • 箭头函数
    let f1 = x => x*x
    let f2 = (x,y) => x+y //
    let f3 = (x,y) => {return x+y} //
    let f4 = (x,y) => ({name:x, age: y})
    

    在调用箭头函数时里面的this就是外面的this,里面没有自己的 this
    箭头函数没有arguments

    • 构造函数
    let f = new Function('x','y','return x+y')
    
    fnfn()区别:

    fn为函数本身,fn()为函数调用


    补充:立即执行函数

    为了得到局部变量,先声明匿名函数并且在匿名函数前面加个运算符,然后加个()立即执行

    //ES 5
    !function(){
      var a = 1
      console.log(a)
    }()
    // ES 6
    {
      let b = 2
      console.log(b)
    }
    

    函数要素

    调用时机、作用域、闭包、形式参数、返回值、调用栈、函数提升、arguments、this

    • 调用时机
    Test1:输出结果为?6个6
    let i = 0
    for(i = 0; i<6; i++){
      setTimeout(()=>{
        console.log(i)
      },0)
    }
    

    先执行for循环,循环结束后i值为6,过一阵之后执行setTimeout函数输出i;因为for循环6次,setTimeout函数执行6次,所以输出6个6

    Test2:如何使输出结果为0、1、2、3、4、5
    //Method 1
    for(let i = 0; i<6; i++){
      setTimeout(()=>{
        console.log(i)
      },0)
    }
    
    //Method 2
    for(var i=0;i<6;i++){
        setTimeout(function(){console.log(i)}(),0)
    }
    
    • 形式参数
    function add(x,y){
      return x+y 
    }
    // x,y就是形参
    add(1,2)
    // 调用add函数时,1,2是实际参数,会被赋值给x,y
    //下面代码近似等价于上面代码
    function add(){
      var x = arguments[0]
      var y = arguments[1]
      return x+y
    }
    
    • 返回值

    每个函数都有返回值
    只有函数有返回值
    函数执行完毕后才会返回

    函数hi没写return,所以返回值是undefined
    函数hello的返回值为console.log('hi')的值,即undefined
    函数fn的返回值为abc

    • 函数提升
    add(1,2)
    function add(x,y){
      return x+y 
    }
    

    无论把具名函数声明在哪,都会跑到第一行
    let fn = function(){} 为赋值,等号右侧的函数声明不会提升

    相关文章

      网友评论

          本文标题:js函数

          本文链接:https://www.haomeiwen.com/subject/ybmenctx.html