javascript中的安全代码它如何处理全局执行上下文

时间:2018-03-27 05:42:22

标签: javascript web

这可能是一个愚蠢的问题,但大多数框架都以

开头
(function(){
//all data
})() 

立即调用表达式 这样就不会与其他js文件发生冲突,所以基本上这是一个在执行后弹出堆栈的函数执行上下文, 但是为什么它仍然可以处理异步请求,例如页面加载后的点击

例如:

(function(){
//all data  
var a=true; 
btn.addEventListener("click",()=>{
alert(a);
});
})() ;

整个代码首先运行,并且一个事件监听器被赋予一个按钮但是之后,执行上下文从堆栈中弹出,那么为什么我的按钮仍然可以联系并从“完成的安全码函数”中获取数据?

这是一个闭包的实现,其中执行堆栈被弹出但依赖的嵌套函数所需的变量仍然挂起?

2 个答案:

答案 0 :(得分:0)

是的,这只是闭包的行为:函数总是可以访问在其外部块(词法范围)中声明的所有内容,即使外部块已经完成执行。在这些函数不再存在之前,变量将继续存在。

答案 1 :(得分:0)

内部函数保留其父项执行上下文的引用