• js中的变量以及作用域


    本博客参考:
    1.菜鸟教程 - 学的不仅是技术,更是梦想!(关于关键字let和const)
    2. 四菜一汤~的博客(关于JavaScript中变量的声明)
    3. 顺其自然~的博客(关于js中变量的命名规则)
    4. 菜鸟教程 - 学的不仅是技术,更是梦想!(关于JavaScript 声明提升)
    5. Netwrok_Nova的博客(JavaScript中的let是什么)
    6. 《HTML5+CSS3+JavaScript网页设计案例课堂(第2版)》(关于变量)

    变量

    用于存储信息的单元,对应于某一个内存单元

    命名规则

    创建变量名称时,应该遵守以下规则

    1. 首字符:字母、下划线、$符号,不能是文字或数字
    2. 后续字符:字母、下划线、$符号和数字
    3. 不能是js的保留字或关键字
    4. 注意区分大小写
    5. 建议驼峰式命名法

    变量声明

    声明一个变量,就是使用关键字对一个变量进行命名
    声明格式

    //只声明单个变量
    var 变量名;
    // 声明一个变量并对其命名
    var 变量名="值";
    
    // 同时声明多个变量
    var 变量名1,变量名2,...;
    // 同时声明多个变量并赋值
    var 变量名1="值1",
    	变量名2="值2",
    	...;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    关于关键字var声明变量的一些问题

    1. 在函数外声明的变量作用域是全局的,但如果在函数内未使用var关键字对变量进行声明,定义的变量也将成为全局变量(非严格模式下)。
    function test1(){
    	ss="这是一个全局变量";
    	return ss;
    }
    console.log(ss);
    //输出 “这是一个全局变量”
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    虽然js是一种弱类型的程序设计语言,变量可不声明直接使用,但是大量的全局变量使得程序的可维护性变得很低

    1. 声明提升
      js中所谓的声明提升,就是函数及变量的声明都将被提升到函数的最顶部,但是变量的初始化赋值不会提升,如果先使用变量然后对变量进行声明和初始化赋值,那么使用到的变量值将会是一个undefined值
    function test1(){
    	console.log(ss);//输出:undefined
    	var ss=9;
    }
    
    • 1
    • 2
    • 3
    • 4
    1. for 循环的变量溢出
      js中将{}称为一个块,在for循环中我们常常需要指定一个变量用于循环的控制,一般来说,循环结束这个变量就应该没用了(我们称该变量的作用域为for循环块内),但是使用var声明的变量会在循环结束后继续停留在程序中,后续程序依然能够使用该变量,这样常常会造成一些问题
    for(var ss=0;ss<11;ss++){
     	;// 此处表示空语句
    }
    console.log(ss);
    //此处将会输出 11
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面的问题其实并不大,而且很容易解决,我们只需要每个作用域开始前声明这些变量即可,这也是正常的 JavaScript 解析步骤,易于我们理解。

    let和const关键字的引入

    ES6引入了一种新的作用域–块作用域

    let关键字

    其中使用let关键字声明的变量只在某一代码块中有效,有效解决了上面使用var关键字声明变量造成的许多问题

    1. let关键字定义的变量的作用域固定,不存在作用域溢出的问题。同一个变量名可以在不同的作用域中使用let关键字重新声明赋值
    let ss=1;
    console.log(ss);// 输出1
    {let ss=2;
    console.log(ss);//输出2
    }
    function test1(){
    	for(var ss=0;ss<11;ss++){;}
    	console.log(ss);
    	}
    test1();//	输出11
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. let关键字定义的变量不允许先使用,需要先声明再使用(不存在变量提升)
    console.log(ss);// 报错:Uncaught ReferenceError: ss is not defined
    let ss=1;
    
    • 1
    • 2

    除此之外,使用let关键字还具有以下特点

    1. 声明的全局作用域变量不属于 window 对象
    let carName = "奥迪";
    // 不能使用 window.carName 访问变量
    
    • 1
    • 2
    1. 不允许在同一作用重复声明同一变量
    let ss=1;
    let ss;	// 报错:Uncaught SyntaxError: Identifier 'ss' has already been declared
    
    • 1
    • 2

    const关键字

    使用格式

    const 常量名=;
    
    • 1

    使用const关键字的注意事项

    1. const关键字常用于定义常量
    2. const声明的常量必须初始化赋值,声明后不允许再次声明和赋值,否则会报错:“Uncaught SyntaxError: Identifier ‘cars’ has already been ”
    3. 使用const定义的如果是普通常量,那么定义后不允许再次修改其值,否则会报错:“Uncaught TypeError: Assignment to constant variable”;如果定义的的是数组或对象,可进行修改
    // 定义一个数组
    const arr1=[1,2,3];
    //修改数组的第二个元素
    arr1[1]=99;
    //定义一个对象
    const person = {name:"小明",age:"12"};
    //对对象的属性进行修改
    person.age="13";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. const声明的常量也具有块级作用域
    2. 常量名不能与作用域内的其他变量名或函数名相同

    关于作用域

    变量的作用域,就是可以访问该变量的代码区域
    在 ES6 之前,JavaScript 只有两种变量(两种作用域): 全局变量 与 函数内的局部变量。

    全局变量

    具有全局作用域,网页中所有脚本和函数均可使用

    局部变量

    具有局部作用域,只作用于函数内,所以不同的函数可以使用相同名称的变量。在函数开始执行时创建,函数执行完后局部变量会自动销毁。

    块作用域

    Es6增加了另一种作用域:块级作用域,它规定每一个{}为一个“块”(如定义函数使用的大括号、for所使用的的大括号等等),使用let、const声明变量\常量时,这些标识符的作用域仅仅在该大括号内

  • 相关阅读:
    一文速学-HiveSQL解析JSON数据详解+代码实战
    Pandas中的数据转换[细节]
    对抗网络爬虫:反爬虫技术与策略详解
    深度之眼(二十三)——Python:Sklearn库
    猿创征文|深度学习基于前馈神经网络完成鸢尾花分类
    认识时间复杂度和简单排序算法
    arcgis js api 4.x加载geoserver发布的地方坐标系(自定义坐标系)的wms服务
    Spring Boot Mock
    会议OA项目之会议排座功能&&会议送审的实现
    UE5发布时出现SDK NOT Setup错误解决方法
  • 原文地址:https://blog.csdn.net/m0_54510474/article/details/124915406