立即执行函数
知识梳理
//1 不需要调用 立马能够自己执行 //2 创建一个独立的作用域 里面所有的变量都是局部变量
//3 可以是命名函数 可以传递参数
传递参数
//语法1 (function (singer) { alert(singer); })('蔡琴');//第二个小括号 可以看做是函数调用 可以传实参 //语法2 (function sing(name){ console.log(name) }('齐秦')); //可以是匿名函数 也可以命名
淘宝的flexible.js就写在一个立即执行函数里面
(function flexible(window, document) { var docEl = document.documentElement var dpr = window.devicePixelRatio || 1 // adjust body font size function setBodyFontSize() { if (document.body) { document.body.style.fontSize = (12 * dpr) + 'px' } else { document.addEventListener('DOMContentLoaded', setBodyFontSize) } } setBodyFontSize(); // set 1rem = viewWidth / 10 function setRemUnit() { var rem = docEl.clientWidth / 10 docEl.style.fontSize = rem + 'px' } setRemUnit() // reset rem unit on page resize window.addEventListener('resize', setRemUnit) window.addEventListener('pageshow', function(e) { if (e.persisted) { setRemUnit() } }) // detect 0.5px supports if (dpr >= 2) { var fakeBody = document.createElement('body') var testElement = document.createElement('div') testElement.style.border = '.5px solid transparent' fakeBody.appendChild(testElement) docEl.appendChild(fakeBody) if (testElement.offsetHeight === 1) { docEl.classList.add('hairlines') } docEl.removeChild(fakeBody) } }(window, document))