前端学习之Javascript基础(二)

本文详细介绍了JavaScript的基础数据类型,包括Undefined、Null、Number、String、Boolean和Symbol。同时阐述了JS内置对象的分类,如Object、Array、Function等。接着,讨论了作用域的概念,包括全局、函数和块级作用域,以及作用域链和闭包的工作原理。闭包作为一种强大的工具,用于保护变量、模拟块级作用域和实现私有成员。此外,还解析了JS中this的五种情况,包括普通函数、对象方法、构造函数、箭头函数以及apply、call和bind的使用。通过对这些概念的深入理解,开发者可以更好地掌握JavaScript的高级特性。

1.介绍JS的基本数据类型

  • Undefined、Null、Number、String、Boolean, es6新增Symbol
    基本数据类型是按值访问的,可以直接操作保存在变量中的实际值

2.JS有哪些内置对象

  • object是js中所有对象的父对象

  • 数据封装类对象:Object Array Boolean Number String

  • 其他对象 Function Arguments Math Date Error RegExp

3.JS有几种类型的值

  • 原始数据类型(Number(数字),String(字符串),Boolean(布尔),Symbol(符号),null(空),undefined(未定义))
  • 引用数据类型(Object(对象)、Function(函数)。其他还有Array(数组)、Date(日期)、RegExp(正则表达式)、特殊的基本包装类型(String、Number、Boolean) 以及单体内置对象(Global、Math)等)

1)两者存储位置不同

  • 原始数据类型储存在栈中 占据空间小,大小固定
  • 引用数据储存在堆中 占据空间大,大小不固定

JS原型 原型链
每个对象都会初始化一个属性就是prototype(原型)。当我们访问一个对象的属性时,如果该对象内部没有这个属性,就会去prototype里面找。而这个prototype又有自己的prototype。这样一直找下去,也就是我们所说的原型链

4.作用域,作用域链,闭包

  • 作用域:决定了代码区块中变量和其他资源的可见性
    全局作用域:

    1. 最外层函数外面定义的变量拥有全局作用域
    2. 所有末定义直接赋值的变量自动声明为拥有全局作用域
    3. 所有window对象的属性拥有全局作用域
  • 函数作用域:
    函数作用域是指声明在函数内部的变量
    和全局作用域相反,局部作用域一般只在固定的代码片段内可访问

  • 块级作用域:
    块级作用域可通过let和const声明复制代码

  • 作用域链:
    全局函数无法查看局部函数的内部细节,但局部函数可以查看上一层,直至全局细节。
    当需要从局部函数查找某一属性或方法时。如果当前作用域没找到,就会追溯到上一层,
    直至全局函数。这种组织形式就是作用域链复制代码

  • 闭包:
    我们把函数执行形成私有上下文,来保护和保存私有变量机制称为闭包。(闭包是指有权访问另一个函数作用域中的变量的函数–《JavaScript高级程序设计》)

在js中变量的作用域属于函数作用域, 在函数执行完后,作用域就会被清理,内存也会随之被回收,但是由于闭包函数是建立在函数内部的子函数, 由于其可访问上级作用域,即使上级函数执行完, 作用域也不会随之销毁, 这时的子函数(也就是闭包),便拥有了访问上级作用域中变量的权限,即使上级函数执行完后作用域内的值也不会被销毁。

1)闭包的特性:

  • 内部函数可以访问定义他们外部函数的参数和变量。(作用域链的向上查找,把外围的作用域中的变量值存储在内存中而不是在函数调用完毕后销毁)设计私有的方法和变量,避免全局变量的污染。

  • 闭包是密闭的容器,,类似于set、map容器,存储数据的

  • 闭包是一个对象,存放数据的格式为 key-value 形式

2)函数嵌套函数

  • 本质是将函数内部和外部连接起来。优点是可以读取函数内部的变量,让这些变量的值始终保存在内存中,不会在函数被调用之后自动清除

3)闭包形成的条件:

  • 函数的嵌套
    内部函数引用外部函数的局部变量,延长外部函数的变量生命周期

  • 闭包的用途:
    1.模仿块级作用域
    2.保护外部函数的变量 能够访问函数定义时所在的词法作用域(阻止其被回收)
    3.封装私有化变量
    4.创建模块

4 ) 闭包应用场景

闭包的两大作用:保存/保护。

在开发中, 其实我们随处可见闭包的身影, 大部分前端JavaScript 代码都是“事件驱动”的,即一个事件绑定的回调方法; 发送ajax请求成功|失败的回调;setTimeout的延时回调;或者一个函数内部返回另一个匿名函数,这些都是闭包的应用。
优点:
1)变量长期驻扎在内存中;
2)避免全局变量的污染;
3)私有成员的存在;
缺点:
容易造成内存泄漏

5.JS 中 this 的五种情况

1.作为普通函数执行时,this指向window。
2.当函数作为对象的方法被调用时,this就会指向该对象。
3.构造器调用,this指向返回的这个对象。
4.箭头函数 箭头函数的this绑定看的是this所在函数定义在哪个对象下,就绑定哪个对象。如果有嵌套的情况,则this绑定到最近的一层对象上。
5.基于Function.prototype上的 apply 、 call 和 bind 调用模式,这三个方法都可以显示的指定调用函数的 this 指向。apply接收参数的是数组,call接受参数列表,`` bind方法通过传入一个对象,返回一个 this 绑定了传入对象的新函数。这个函数的 this指向除了使用new `时会被改变,其他情况下都不会改变。若为空默认是指向全局对象window。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值