js之闭包经典面试题
发布日期:2021-06-30 11:50:38 浏览次数:2 分类:技术文章

本文共 1215 字,大约阅读时间需要 4 分钟。

//1.下面代码执行后的结果是?如何处理var arr = [];for(var i = 0;i<10;i++){	arr.push(function () {		console.log(i);	})}//[function(){},function(){},function(){},function(){}。。。。]arr[6](); //i是几 10// //由于for循环先执行,函数的调用后执行 因此函数调用的时候 for循环已经执行完了,i==10 //解决问题 闭包  闭包特点:闭包中声明的变量 类似于全局变量 会被一直保存在内存中var arr1 = [];for (var i = 0; i < 10; i++) {	(function(a) {		//形参a相当于声明了变量a		//var a = i		arr1.push(function() {			console.log(a);	//6		})	})(i)}arr1[6](); //6/*示例for (var i = 0; i < liS.length; i++) {	(function (a) {		//函数的形参 就相当于在 函数中 声明了一个变量		//var a = 实参0		liS[a].onclick = function () {			console.log(a); //5		}	})(i);}*///2.function fun(n, o) {	console.log(o);	return {		fun: function(m) {			return fun(m, n);		}	};}var a = fun(0); //n:0 o:undefined   undefined//a:{fun:function(m){ return fun(m,n) }} //这里调用的fun是全局的fun函数a.fun(1); //m:1 n:0 fun(1,0)  0a.fun(2); //m:2 n:0 fun(2,0)  0a.fun(3); //m:3 n:0 fun(3,0)  0//上述所有a的fun方法的调用 获取的都是第0个n//3.for (var i = 0; i < 5; i++) {	setTimeout(function() {		console.log(i, new Date());	}, 1000);}console.log(i, new Date()); //循环已经结束 i==5 当前时间//5 当前时间//(5 当前时间+1s)*5 //js中分为 同步和异步 代码//异步代码:事件 定时器 ajax//同步代码:非异步代码//js中先执行同步代码  再将异步代码从任务队列中取出 执行//js在内存中开辟出了一块空间  任务队列  在执行代码的时候如果遇到异步代码就先放到任务队列中等待

 

转载地址:https://jackiehao.blog.csdn.net/article/details/105532944 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:本地服务器wampserver集成服务器安装
下一篇:js用面向对象实现给手机号中间4位数打*号

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月19日 00时56分06秒