大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
??:写在前面:在学习了闭包之后,试着做做这些题。其实是一种很棒地检验自己学习成果的手段。我当时反反复复,学了但好像又没完全学,遇到题还是一头雾水,到现在可以捋得很清楚也经历了蛮久的。而且从this,执行上下文,作用域一直走过来,这些题目涉及的内容也相对全面,加油喽。??
?【JS基础整理—No.06】闭包_Chailo的博客-CSDN博客
//? 闭包面试题1
function show(){
f = function fn(){
console.log(x);
}
var x=20;
f();
}
show(); //20
//? 闭包面试题2
var name='window'
var object={
name:'object',
getName:function(){
return function(){
return this.name
}
}
}
console.log(object.getName()()); //window
// fn1=object.getName(); 即fn1=getName()的返回值
// fn1=function(){return this.name}
// 输出 fn1() 相当于 函数自调用
//? 闭包面试题3
var name='window'
var object={
name:'object'
getName:function(){
var that=this //关键点
return function(){
return that.name
}
}
}
console.log(object.getName(())); //object
//? 闭包面试题4
functiom fun(){
return console.log(1); //console.log(1)也是一个函数
}
console.log(fun()); //1 undefined
最后这俩题当时绕了我好一阵
//? 闭包面试题终极一
function fun(n ,o){
console.log(o)
return{
fun:function(m){
return fun(m,n)
}
}
}
var a= fun(0) //打印o Undefined 给a返回一个对象 里面有闭包{n:0}
a.fun(1) //打印o 0 调用a的属性fun m=1,去上层作用域找到 n=0 fun(1,0) 打印o 0
a.fun(2) //打印o 0 调用a的属性fun m=2,去上层作用域找到 n=0 fun(2,0) 打印o 0
a.fun(3) //打印o 0 调用a的属性fun m=3,去上层作用域找到 n=0 fun(3,0) 打印o 0
//Undefined 0 0 0
//----------
var b=fun(0).fun(1).fun(2).fun(3) // Undefined 0 1 2
//打印o 0 调用a的属性fun m=1,去上层作用域找到 n=0 fun(1,0) 打印o 0 此时 n=m=1
//fun(0).fun(1). fun(2) n=1 fun(2,1) 打印o 1
//...
//----------
var c=fun(0).fun(1) //Undefined 0
c.fun(2) //1
c.fun(3) //1
//? 闭包面试题终极
function Foo(){
getName=function(){alert(1);}
return this
}
Foo.getName=function(){alert(2);}
Foo.prototype.getName=function(){alert(3);}
var getName=function(){alert(4);}
function getName(){alert(5);}
//请写出输出结果
Foo.getName(); //2
getName(); //4 出现同名的变量和函数,预解析完getName指向函数;代码执行过程中给变量赋值
Foo().getName(); //1
//对象.getName() Foo()自调用,返回对象this,this-->window 即window.getName();但是函数调用会把全局的getName()覆盖掉
getName(); //1 全局getName被覆盖
new Foo.getName(); //2 new关键字的作用:执行函数;找最近的()
new Foo().getName();//3 var f=new Foo(); f.getName(); Foo的实例f,f现在自身找,找不到去原型找。
new new Foo().getName();//3 var f=new Foo(); new f.getName(); new function(){alert(3);}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179739.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...