首页 > 其他分享 >前端面试总结04-作用域与闭包

前端面试总结04-作用域与闭包

时间:2022-09-21 23:45:44浏览次数:56  
标签:闭包 function console log 04 作用域 const 100

作用域:

全局作用域

函数作用域

块级作用域(es6新增)

自由变量:

1.一个变量在当前作用域没有定义,但被使用了

2.向上级作用域,一层一层依次寻找,直到找到为止

3.如果到全局作用域都没找到,则报错xx is not defined

闭包:

1.闭包是一种作用域应用的特殊情况,有两种表现:

(1:函数作为参数被传递

function create(){

let a =100;

return function(){

console.log(a)

}

}

let fn = create();

let a = 200;

fn()//结果是100

(2:函数作为参数被传递:

function print(fn){

let a =200;

fn();

}

let a = 100;

function fn(){

console.log(a)

}

print(fn);//结果是100;

 

this使用场景:

(1:作为普通函数:

function fn1(){

console.log(this)

}

fn1;//输出为windows

(2:使用call apply bind 改变this指向

fn1.call({x:100})//此时this指向{x:100}

const fn2 = fn1.bind({x:200});

fn2();//此时需要调用后生效this指向{x:200}

(3:作为对象方法被调用:

const zhangsan={

name:'张三‘,

sayHi(){

console.log(this);

},

wait(){

setTimeout(function(){

console.log(this);//this此时指向window

})

},

waitAgain(){

setTimeout(()=>{

console.log(this);//此时使用的是箭头函数,故this此时指向当前对象

})

}

}

(4:在class方法中调用

class People{

constructor(name){

this.name=name;

this.age=20;

}

sayHi(){

console.log(this)

}

}

const zhangsan = new People('张三');

zhangsan.sayHi()//此时this指向zhangsan对象

(5:箭头函数

 

实际开发中闭包的应用:

1.隐藏数据

2.简单做一个cache工具

//闭包隐藏数据,只提供api

function createCache(){

const data={};

return{

set:function(key,value){

data[key]=value;

},

set:function(key){

return data[key]

}

}

}

const c = createCache();

c.set('a',100);

console.log(c.get('a'));

 

手写bind

//这里是因为this.__proto__===Function.prototype

Function.prototype.bind1 = funtion(){

//将参数拆解成数组

const args = Array.prototype.slice.call(arguments);

//获取this即args中的第一项

const t =args.shift();

//fn1.bind(...)中的fn1

const self=this;

//返回函数

return function(){

return self.apply(t,args);

}

}

标签:闭包,function,console,log,04,作用域,const,100
From: https://www.cnblogs.com/qwqxyd/p/16717646.html

相关文章

  • T1041奇偶数判断 (信息学一本通C++)
     目录 [题目描述]给定一个整数,判断该数是奇数还是偶数。如果n是奇数,输出odd;如果n是偶数,输出even。[输入]输入仅一行,一个大于零的正整数n。[输出]输出仅一行,如果n......
  • T1043 整数大小比较(信息学一本通C++)
      目录 [题目描述]输入两个整数,比较它们的大小。若x>y,输出>;若x=y,输出=;若x<y,输出<。[输入]一行,包含两个整数x和y,中间用单个空格隔开。0≤x<2^32,−2^31≤y<2^31。......
  • T1042 奇偶ASCII值判断(信息学一本通C++)
     目录  [题目描述]任意输入一个字符,判断其ASCII是否是奇数,若是,输出YES,否则,输出NO。[输入]输入一个字符。[输出]如果其ASCII值为奇数,则输出YES,否则,输出NO。[输......
  • Windows 10 版本 2004 以下安装 WSL
    安装Linux官方文档旧版WSL的手动安装步骤由于Windows版本实在太老,不能安装WSL2。手动安装这里选择下载KaliLinux发行版进行安装。下载安装后,『开始』->『K......
  • T1045 收集瓶盖赢大奖(信息学一本通C++)
     目录 [题目描述]某饮料公司最近推出了一个“收集瓶盖赢大奖”的活动:如果你拥有10个印有“幸运”、或20个印有“鼓励”的瓶盖,就可以兑换一个神秘大奖。现分别给出你......
  • T1044 判断是否为两位数(信息学一本通C++)
     目录 [题目描述]判断一个正整数是否是两位数(即大于等于10且小于等于99)。若该正整数是两位数,输出1,否则输出0。[输入]一个正整数,不超过1000。[输出]一行。若该......
  • T1047 判断能否被3,5,7整除(信息学一本通C++)
     目录 [题目描述]给定一个整数,判断它能否被3,5,7整除,并输出以下信息:   1、能同时被3,5,7整除(直接输出357,每个数中间一个空格);   2、只能被其中两个数整除(输出两......
  • T1046判断一个数能否同时被3和5整除 (信息学一本通C++)
     目录 [题目描述] 判断一个数n能否同时被3和5整除,如果能同时被3和5整除输出YES,否则输出NO。[输入]输入一行,包含一个整数n。( -1,000,000<n<1,000,000)[输出]......
  • T1048有一门课不及格的学生 (信息学一本通C++)
     目录 [题目描述]给出一名学生的语文和数学成绩,判断他是否恰好有一门课不及格(成绩小于60分)。若该生恰好有一门课不及格,输出1;否则输出0。[输入]一行,包含两个在0到......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    2022/09/21第一天数组第一题第二题思路:交换数值为val的元素与最后一个元素的位置,并减少数组的长度......