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);