-
作用域:函数名.[[scope]],存储了运行期上下文的集合,这个集合呈链式结构
执行器上下文:AO GO
函数每次执行会产生一个独一无二的执行器上下文,执行完毕之后,产生的执行上下文被销毁。
在函数中查找变量的时候:从作用域链的顶端依次向下查找 -
闭包:内部函数保存到外部,会形成闭包。闭包会导致原有的作用域链不释放,造成内存泄漏。
-
闭包的应用
累加器
可以做缓存(存储结构)
可以实现封装,属性私有化(结合对象)
模块化开发,防止污染全局变量 -
立即执行函数;针对初始化功能的函数,函数执行后立即释放。
第一种写法:w3c标准写法:(函数(a,b,c));
var num=(function(){
return d=a+b+c;
}(1,2,3))
第二种:(function(){})();前面括号的功能是将函数变成表达式。
只有表达式才能被执行符号执行,函数声明不可以被直接执行。
例子var test=function(){}();可以被执行。
function test(){}();不可以被执行。
+/-/! function test(){}();可以被执行。
下面这个函数不报错,系统会认为括号内带实参不被当成执行符号。
function test(a,b){
console.log(a+b);
}
(1,2); -
for循环会形成闭包,用立即执行函数解决。
-
逗号操作符:var a=(2,3);返回逗号后面表达式的内容。
-
()会把里面的内容变成表达式
var x= 1 ;
if (function f(){}){
x+=typeof f;
}
console.log(x);
不报错,且输出值为1undefined。
闭包
最新推荐文章于 2024-07-08 08:31:50 发布