js基础-作用域 闭包

js基础-作用域 闭包

作用域

何为作用域

任何编程语言都有作用域的概念,简单来说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。

js的作用域是靠函数来形成的,也就是说一个函数的变量在函数外不可以访问

1全局作用域

任何地方都能访问到的对象拥有全局作用域。

2局部作用域

局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所以在一些地方会把这种作用域成为函数作用域。

3ES6的块级作用域

ES5只有全局作用域和函数作用域,没有块级作用域,

闭包

提到作用域就不得不提到闭包,简单来讲,闭包外部函数能够读取内部函数的变量。

优点:闭包可以形成独立的空间,永久的保存局部变量。

缺点:保存中间值的状态缺点是容易造成内存泄漏,因为闭包中的局部变量永远不会被回收

this

不同的应用场景场景:

  1. 作为普通函数被调用
  2. 使用call apply bind 作为对象方法被调用
  3. 在class方法中调用 箭头函数
  4. this在场景中取什么样的值是由函数执行时确认的

手写bind函数

	function fn1(a,b){
    console.log(this)   //x:100
    console.log(a,b)    //1,2
    return "fn1"
}
// bind改变this指返回对象
const fn2 = fn1.bind({x:100},1,2)
//使用bind改变this后需要调用
const res = fn2

//模拟bind
Function.prototype.bind1=function(){
    //将参数拆解为数组
    const args =Array.prototype.slice.call(arguments)

    //获取this(数组第一项)
    const t =args.shift()
    //fn1.bind()中的fn1
    const self = this
    //返回一个函数
    return function(){
        return self.apply(t,args)
    }
}
const fn3 = fn1.bind1({x:100},1,2)
const ress = fn3()
console.log(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值