美文网首页
js立即执行函数理解

js立即执行函数理解

作者: 奋斗live | 来源:发表于2020-01-14 16:11 被阅读0次

    通过立即函数可以创建一个独立的作用域。这个作用域中的变量,外面访问不到。比如你参与了一个多人协作一起开发的项目,你定义的一些变量,不小心被别人同名的变量给覆盖掉了,这样就可以使用这个立即执行函数来整一个自己的私用作用域,防止与外部的变量的发生冲突。比如jquery框架就是如此,防止jquery创建的变量与导入它的程序所使用的变量发生冲突。

    有一道著名的题目:

    var liList = ul.getElementsByTagName('li')
    for(var i=0; i<6; i++){
     liList[i].onclick = function(){
       alert(i) // 为什么 alert 出来的总是 6,而不是 0、1、2、3、4、5
     }
    }
    

    可以使用立即执行函数创建独立作用域来解决

    
    var liList = ul.getElementsByTagName('li')
    for(var i=0; i<6; i++){
      !function(j){
        liList[j].onclick = function(){
          alert(j) // 0、1、2、3、4、5
        }
      }(i)
    }
    

    接下来,我们来看看下立即执行函数是如何进行使用的。

    一、普通函数

    1、比如我们常见的函数声明

    function cat(){
      var age=45;
     console.log("this is cat");
    }
    

    2、匿名函数表达式(赋值给一个变量)

    var animal = function(){
      var age=45;
      console.log("this is cat");
    }
    

    以上就是我们常见的函数声明和使用

    二、立即执行函数

    立即函数常见形式如下:

    ( function(){…} )()
    

    ( function (){…} () )
    

    如下代码执行

    <script>
        (function (a) {
            age = 111;
            console.log(a);
            console.log(age);
        })(1234)
    </script>
    

    则如下输出


    image.png

    注意:这不算是函数声明,所谓立即,就是可以立即执行的意思,里面的函数表达式可以立即被javascript引擎所执行
    我们再来看看其他立即执行函数的用法,如下

    测试
    <script>
        (function (num) {
            age = 111;
            console.log(num);
        })(1234)
        console.log("-------1111--------");
        (function (num) {
            age = 111;
            console.log(num);
        }(1234))
        console.log("-------2222--------");
    
        !function (num) {
            console.log(num);
        }(1234)
        console.log("-------3333--------");
        +function (num) {
            console.log(num);
        }(1234)
        console.log("-------4444--------");
        -function (num) {
            console.log(num);
        }(1234)
        console.log("-------5555--------");
        var test = function (num) {
            console.log(num);
        }(1234)
    </script>
    

    输出如下


    image.png

    这些!、+、-、=等运算符都能让它们起到立即执行的作用,使函数声明直接转换成了函数表达式,帮助javascript引擎识别它们,告诉引擎,这些是函数表达式,不是函数声明。

    相关文章

      网友评论

          本文标题:js立即执行函数理解

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