js高级_117、闭包面试题

1

这题没有产生闭包

	var name="The Window";
	var obj={
		name:"My Object",
		getNameFunc:function(){
			return function(){
				return this.name;
			}
		}
	}

	alert( obj.getNameFunc()() );//The Window

image

2、、

这题产生了一个闭包

	var name2="The Window";
	var obj2={
		name2:"My Object",
		getNameFunc:function(){
			
			var that=this;
			return function(){
				return that.name2;//that就是闭包的变量
			}
		}
	}

alert(obj2.getNameFunc()());//My Object

3、

闭包只有外部函数被调用时才会产生新的闭包。

function fun(n,o){
	console.log(o);
	return{
		fun:function(m){//fun虽然装的是方法,但是fun是一个属性名,访问属性是通过对象名.性
			return fun(m,n);
		}
	};
}

var a=fun(0);
a.fun(1);//调用fun会产生新的闭包,因为a是返回的一整个函数,调用a就等于又调用了外部函数。但是这个闭包会马上消失,因为没有变量接收它,也就是没有任何变量引用它。而且,一直是通过a对象的fun属性进行调用的,所以只有a对象有在引用最开始的那个闭包,后面创建的新闭包都是函数调用完就释放了。
a.fun(2);//和上面一样,没有接收闭包。
a.fun(3);
//undefind,0,0,0



var b=fun(0).fun(1).fun(2).fun(3);//undefind,

var c=fun(0).fun(1); c.fun(2);c.fun(3);//undefind,

var b=fun(0).fun(1).fun(2).fun(3);//undefind,
image

var c=fun(0).fun(1); c.fun(2);c.fun(3);//undefind,
image

posted @   青仙  阅读(352)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示