JS的变量,作用域详细解析

基本类型和引用类型的值

在JS这个弱类型语言中,包含了5种基本类型Undefined,Null,Boolean,Number和String。这些都是一旦定义了,就会直接将数据的值放在栈内存中,也就是说你对其进行修改的话,就会直接修改其本身的值。而如果是引用类型的话,在栈内存中其实存储的是定义的变量的一个地址指针,其代表的是在堆内存中的指向,所以你如果仅仅是简单的复制值,就会可能造成“动一发而牵全身”(也就是你修改一个值,其他也会改变),所以后面会涉及到复制值的问题。此处需要讲一下的就是可以使用instance of和typeof来判断,这两者有什么区别的,也就是instanceof是判断引用类型的,typeof一般是用来检测基本类型的。

执行环境和作用域

首先我们需要的知道的就是在原生JS中,只有全局作用域和函数作用域,所谓的块级作用域则是在ES6中才进行引入的。了解了这个情况后,下面我们一起来了解一下在JS中的常见的作用域问题:
我们首先知道的就是每个函数既然有自己的执行环境(也就是函数作用域),我们就应该会想,这个函数里面可以使用哪些变量呢?它可以访问外部的变量,也就是说,如果一个函数是在全局定义的,那么他就可以访问在window环境下(也就是全局)的变量,那么如果一个函数想访问另一个函数的内部定义的变量呢?这个问题就是前端常常涉及的闭包问题了。

闭包

闭包也就是上文所述的,在一个函数内部可以访问另一个函数内部的变量,这就是常说的闭包问题。那么这个东西既然经常涉及,那么他有什么用呢?下面我们就来了解一下:

  1. 闭包可以保留外部函数内定义的变量不会被垃圾回收机制回收,学过java的知道,java有一个回收机制,此处js也有一个回收机制,他会自动检测讲不在使用的变量进行回收,这样可以减少内存的消耗,但是用了闭包之后,这个就不会被回收,因为其处于一个作用域链的调用中,所以内部函数进行使用的时候,这个变量就不会被销毁。那么闭包常用的用处有什么呢,此处小编略微涉及一下:比如常用的防抖等等会用到闭包。

第一次发表文章,如果有错误,麻烦指正哈!谢谢各位大佬们

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值