var i = 10; function test(){ var j; i=20; //未定义 function test(){ j='hello'; } console.log(test()); //undefined console.log(j); //hello } test(); console.log(i); //20
var a = 12; var b = "12"; function c(){ } var c = function(){ d = 15; a = 20; function e(){ d = 33; } var d; e(); console.log(d); //33 } c(); console.log(a); //20 console.log(b); //"12"
栈里面存放变量,堆里面存放对象,常量池里面存放常量。
闭包内存图:
函数调用本质其实是创建一个临时的闭包空间,调用完成,空间自动回收,销毁
闭包寻找变量的时候,作用域是就近原则