js立即执行函数

  • js没有私有作用域的概念,避免命名冲突,引入了“匿名包裹器”或者“命名空间”的写法,即用匿名函数作为一个容器
  • js引擎在执行js代码时会“函数声明提升”,而函数表达式会从上至下逐行执行, js的函数和变量都会提升到函数的最顶部,即可以先使用再声明
    //在function前面使用(),!,+,-,= 可以将函数声明转换成函数表达式,消除了js引擎对函数声明和函数表达式的歧义
    (function(a){
        console.log(a);
    })(123);
    
    (function(a){
        console.log(a);
    }(1234));
    
    +function(a){
        console.log(a);
    }(12345);
    
    var fn = function(a){
        console.log(a);
    }(123456);
  • js里面函数内部可以访问上层作用域的变量,但外部不能访问内部的变量
  • var Lisener = {};
    (function(a){
        var in_fn = [];
        a.name = "Lucy";
        a.subscribe = function(m){
            in_fn.push(m);
            console.log(in_fn);
        }
    
        console.log(a);
    })(Lisener);
    
    ;(function(){
        //这个闭包函数内部可以访问全局变量Lisener,但不能访问in_fn
        for(var i = 1; i< 6; i++){
            Lisener.subscribe(i);
        }
    })();
  • DOM对象和jquery对象, (dom对象才能使用dom中的方法,jquery对象不可以使用dom中的方法)
  • 一般的话定义jquery对象用 $开头
    
    DOM对象     var domObj = document.getElementById("#id");
    jquery对象  var $jQeryObj = $("#id")
    jquery对象是通过jQuery包装DOM对象后产生的对象
    互相转换  var domObj1 = $jQeryObj[0] 或者 $jQeryObj.get(0)
              var $sr = $(domObj);
原文地址:https://www.cnblogs.com/leijiuling/p/5639730.html