博客列表 >变量,常量的区别+JS数据类型+作用域+闭包

变量,常量的区别+JS数据类型+作用域+闭包

deathpool
deathpool原创
2021年10月02日 11:38:44776浏览

变量,常量的区别

变量
  • 可以改变的量,往往用英语字母代替变量,并且区分大小写;
  • 定义声明 var/let 加变量名,比如:
    let b;b=3;
    var a = 1;
  • 变量的用途其实是一个容器,它的作用在于可以起到一个临时存储数据。
    常量
  • 不会改变的值
    使用const 关键字来声明
    习惯上常量名称使用大写定义
    区别
    常量与变量的区别
  • 常量与变量的存储方式是一样的,只不过常量必须要有初始值,而且值不允许被修改,而变量可以无初始值,且可以多次赋值。

JS 基本数据类型

1.String 类型

字符串(String)类型是一段以单引号’’或双引号””包裹起来的文本,例如 ‘123’、”abc”。需要注意的是,单引号和双引号是定义字符串的不同方式,并不是字符串的一部分。

定义字符串时,如果字符串中包含引号,可以使用反斜杠\来转义字符串中的引号,或者选择与字符串中不同的引号来定义字符串,如下例所示:
let str = "asd"; let str = '\n asd';

2.Number(数字) 类型
数值(Number)类型用来定义数值,JavaScript 中不区分整数和小数(浮点数),统一使用 Number 类型表示,如下例所示:
let num1 = 123; // 整数 let num2 = 3.14; // 浮点数
注意:Number 类型所能定义的数值并不是无限的,JavaScript 中的 Number 类型只能表示 -(253 - 1) 到 (253 -1) 之间的数值。

3.Boolean(布尔) 类型
布尔(Boolean)类型只有两个值,true(真)或者 false(假)
例子:
let a = true; // 定义一个布尔值 true let b = false; // 定义一个布尔值 false

4.Null 类型
Null 是一个只有一个值的特殊数据类型,表示一个“空”值,即不存在任何值,什么都没有,用来定义空对象指针。

使用 typeof 操作符来查看 Null 的类型,会发现 Null 的类型为 Object,说明 Null 其实使用属于 Object(对象)的一个特殊值。因此通过将变量赋值为 Null 我们可以创建一个空的对象。

5.Undefined 类型
Undefined 也是一个只有一个值的特殊数据类型,表示未定义。当我们声明一个变量但未给变量赋值时,这个变量的默认值就是 Undefined。例如:
let num; console.log(num); // 输出 undefined


JS 引用数据类型

1.Object 类型
JavaScript 中的对象(Object)类型是一组由键、值组成的无序集合,定义对象类型需要使用花括号{ },语法格式如下:
{n1: 1, n2: v2, n3:3, …, nN: vN}

其中 n1、n2、n3、…、nN 为对象中的键,va1、v2、v3、…、vN 为对应的值。

在 JavaScript 中,对象类型的键都是字符串类型的,值则可以是任意数据类型。要获取对象中的某个值,可以使用对象名.键的形式,如下例所示:

  1. let shuju = {
  2. name: 'asd',
  3. num: 20,
  4. arr: ['js', 'web', 'php'],
  5. str: 'Beijing',
  6. right: true,
  7. zero: null
  8. };
  9. console.log(shuju.num); // 输出 20
  10. console.log(shuju.name); // 输出 asd
  11. // 另外一种输出方式
  12. const item2 = {
  13. "my name": "充电宝",
  14. "min-price": 9.9,
  15. };
  16. console.log(item2["my name"]);//输出充电宝
  17. console.log(item2["min-price"]);//输出9.9

2.Array(数组) 类型
数组(Array)是一组按顺序排列的数据的集合,数组中的每个值都称为元素,而且数组中可以包含任意类型的数据。在 JavaScript 中定义数组需要使用方括号[ ],数组中的每个元素使用逗号进行分隔,例如:
[1, 2, 3, 'hello', true, null]
另外,也可以使用 Array() 函数来创建数组,如下例所示:

  1. let arr = new Array(1, 2, 3, 4);
  2. console.log(arr); // 输出 [1, 2, 3, 4]

数组中的元素可以通过索引来访问。数组中的索引从 0 开始,并依次递增,也就是说数组第一个元素的索引为 0,第二个元素的索引为 1,第三个元素的索引为 2,以此类推。如下例所示:

  1. let qwe= [1, 2, 3.14, 'asd', null, true];
  2. console.log(let[0]); // 输出索引为 0 的元素,即 1
  3. console.log(let[5]); // 输出索引为 5 的元素,即 true
  4. console.log(let[100]); // 索引超出了范围,返回 undefined

3.Function(函数) 类型
函数(Function)是一段具有特定功能的代码块,函数并不会自动运行,需要通过函数名调用才能运行,如下例所示:

  1. function asd_Asd(n){
  2. return "asd, " + n;
  3. }
  4. let res = asd_Asd("qq");
  5. console.log(res); // 输出 asd,qq

全局作用域

全局变量是指:在大括号或者函数的代码块外声明了一个变量,这个变量的作用域就是全局作用域,能在全局任意地方被调用。

  1. let asd='1';
  2. function asd1 () {
  3. console.log(asd) // 输出:'1'
  4. }
  5. function asd2 () {
  6. console.log(asd) // 输出:'1'
  7. }
  8. console.log(asd) // 输出:'1'

局部作用域
局部作用域指:函数内定义的变量,就是局部作用域的变量,能够在该级作用域级任意下级作用域中使用,变量aasd只能在asd函数内部包括内部函数中使用,asd()函数外部就无法调用aasd变量。

  1. function asd() {
  2. let aasd = 1;
  3. console.log(aasd) // 输出:1
  4. function asd_A() {
  5. console.log(aasd); // 输出:1
  6. }
  7. asd_A();
  8. }
  9. function asd2() {
  10. console.log(aasd) ;
  11. }
  12. asd2(); // 结果:报错

闭包

  • 闭包的含义:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

  • 闭包的特点:
    作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
    一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
    简单的闭包如下:

    1. function f1(){
    2. let a = 100;
    3. return function f2(){
    4. alert(++a);
    5. }
    6. }

函数执行时创建了一个内部函数,这个内部函数作为返回值,或以某种方式保留下来(属性),之后才会调用,这就会形成了闭包。通俗来讲,JS所有的function都是一个闭包。

  • 用途
    匿名自执行函数
    创建一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,因此在函数执行完后会立刻释放资源,关键是不污染全局对象。
    代码如下:
  1. (function() {
  2. let a=1;
  3. consol.log(a);
  4. } ());
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议