IIFEIIFE:immediately-invokedfunctionexpression,立即调用函数表达式,定义函数后立即执行,是一种语法。预备知识了解函数声明和函数表达式的区别。以function开头的是函数声明,赋值给变量的是函数表达式。示例:functiona(){}//函数声明vara=function(){};//函数表达式form(function(){})();//形式1(函数(){}());//形式2+function(){}();//形式3-function(){}();//表格4!function(){}();//形式5~function(){}();//形式6声明一个函数,通常是匿名函数,因为立即执行的函数是将函数声明转换为没有名字的函数表达式,可以使用如下四种一元运算符(只有一个操作数):+-!~(按位取反运算符),或者用括号括起来让表达式在表达式后面加上括号让函数立即执行。不必为函数命名以避免污染全局变量。创建一个独立的范围。这个范围内的变量不能被外界访问,避免污染全局变量。使用场景页面加载完成后,需要立即进行一些初始化设置,如事件处理、对象创建等。应用程序中只执行一次的代码闭包。这个知识点总结了很多次,主要是我没有一个清晰的概念,而且工作中用到的场景也很好,以后遇到再补充。闭包:在函数外访问函数内部变量的函数就是闭包。一般情况下,函数内部的变量是无法在函数外部访问的。例如,functiona(){leti=0;}console.log(i);//ReferenceError:iisnotdefined外部访问的时候会报错,对吧,因为按照作用域链的规则,只能是函数内部才能访问外部变量,所以我现在有个需求,我要访问内部变量,怎么办,这次可以用闭包了。由于内部可以访问外部变量,所以我会在内部定义一个函数来访问这个变量,然后我很快就会返回这个函数。函数a(){让i=0;返回函数b(){console.log(i);}}让c=a();c();//0被修改了,这个是闭包closure会不会导致内存泄露?怎么说呢,我觉得这个问题可能会导致内存泄露,但是有可能。如果我们在写代码的过程中不自觉的使用了闭包,此时的运行环境js引擎如果优化好了,就会自动为我们释放。我们不需要担心,但有些不会被释放。当项目很大,电脑配置不好时,可能会造成内存泄漏。但是现在的js引擎优化的很好,es6出来之后,感觉一般业务场景不需要闭包,加上正确学习和使用闭包,感觉没什么问题。
