js中的函数

吐槽君 分类:javascript

什么是函数

  • 为实现某一任务或者功能的代码块

怎么定义使用函数

  • 通过function定义

    在js中我们可以通过function关键词定义一个函数,后面是函数名和括号()

    function foo(a,b){
        return a+b
    }
    
    //函数调用的时
    foo()
    ···
    
     
  • 也可通过表达式定义函数

    它相当于定义个函数赋值给foo,它也是一个匿名函数,因为没有函数名

    const foo = function(a,b){
        return a+b
    }
    //函数调用的时
    foo()
     
  • ES6中新增了箭头函数

    它实际就相当于个匿名函数,简化了它的操作,但它和匿名函数又不同,箭头函数是没有this的,它的this是根据上下文继承下来的.

    //例如上面的函数可以用箭头函数写成这样
    const foo = (a,b) => a+b
    //当没有参数 () ;有一个参数,比如a ,可以直接 a => {...};当多个参数是(a,b,c).如果只有一条返回语句,可以将return也省略;多条时用花括号包裹.
    
     

变量的作用域

  • 在函数内var定义一个变量是有它的作用域的,它会提升到这个函数整体,但是在外部是无法访问它的

     function foo(){
         var a = 1
         a = a+1
     }
     a = a+2
     // a is not defined
     

    同理,我们定义多个函数使用同一个变量名时,它们是互不影响的.

  • 函数内定义函数定义的变量

    function foo(){
        function bar(){
            var x = x+1
        }
        x = x+2
    }
    //x is not defined
    function foo(){
        var x = 1
         function bar(){
            x = x+2
        }  
    }
    //x 可以访问
     

    当我们在函数内定义一个函数时,内部函数可以访问到外部函数变量,而反过来外部函数却访问不到内部函数的变量.
    也就是说js查找变量是从内向外查找的.

闭包

  • 在上面说了内部函数可以访问到外部函数变量,而反过来外部函数却访问不到内部函数的变量.那么我们想要外部函数访问内部函数变量该怎么做呢?那就使用闭包实现.

它的优点在于可以将变量私有化,常驻在内存中,避免了变量的全局污染.
它的缺点在于在于内存泄漏

function foo(){
  var a = 10;  // foo的活动对象之中;
  return function(){   //匿名函数的活动对象;返回的是这个函数
    console.log(a)
  }
}
var b = foo() 当调用foo时,返回的参数是一个函数
b() 调用b时才是返回真正的结果
 

回复

我来回复
  • 暂无回复内容