js学习——变量及变量提升问题(2)

  1. 命名规则:
    JS中的变量是弱类型,可以保存所有类型的数据,变量没有类型而值有类型。 变量名以字母、$、_ 开始,后跟字母、数字、_.。
	var web = "goodnight";
    let $ = "csdn";
    var _dou = "you" ;
	变量名不能是JS语言关键字,比如true、if、class等。
  1. 变量声明与赋值:
 	var test;
    test = "lxx";
        // 先声明后赋值
 	var test = "lxx";
        // 声明与赋值的结合
  var web = "good",
      name="bad",
      url="https://find.com";
      console.log(url); 
        // 可以同时声明多个变量
        
   var web = url = name = "good";
   console.log(web);
   console.log(url);
   console.log(name);
        
变量可以更换不同类型的数据。
  var web = "lxx";
  console.log(typeof web); //string
  web = 87;
  console.log(typeof web); //number
  web = {};
  console.log(typeof web); //object
        // 变量可以更换不同类型的数据。
  1. 变量提升:
    运行代码时,解析器会先解析代码,把对变量的声明提升到最前面,这就叫做变量的提升。
    例如:下面代码在解析时发现第三行代码 while不能做为变量名,没有到执行环节就出现错误,并不会在控制台输出第二行代码的结果:(体会一下解析过程)
	var a = "lxx";
	console.log(a);
	let while = "bhh";//此行会报错

变量提升:

 	console.log(a);
    var a = 1;
    console.log(a);
    //执行结果会在控制台输出 undefined和1
       
    //以上代码在解析时执行过程:(把声明的语句会提前,赋值的语句位置不变)
    var a;
    console.log(a);//undefined
    a = 1;
    console.log(a);//1           

控制台输出:
js学习——变量及变量提升问题(2)
第二个例子:(执行hd函数时,if内的var也会提升,所以控制台还是会输出undefined,在去掉if部分输出的结果就会不同)

    var dou = "fff";
    function hd() {
    	if (false) {
        	var dou = "xxxxxxxxxx";
        }
    	console.log(dou);
    }
    hd();

结果:
js学习——变量及变量提升问题(2)

  1. TDZ:
    TDZ称为暂时性死区。指变量在作用域内已经存在,但必须在let/const声明后才可以使用。

    TDZ可以让程序保持先声明后使用的习惯,让程序更稳定。

    在上面的变量提升中,var声明的变量出现先使用后声明赋值时不会报错,变量提升后只会出现undefined,而使用let/const声明的变量在声明前存在临时性死区使用会发生错误

	console.log(dou);
    let dou = "xxxxxxxxxxx";

运行结果出错:
js学习——变量及变量提升问题(2)
在run函数作用域中产生TDZ,不允许变量在未声明前使用。

dou = "xxxxxxx";
function run() {
  console.log(dou);
  let dou = "hhhhhhhhhhhh";
}
run();

js学习——变量及变量提升问题(2)
参数也存在这样的问题:
下面代码b没有声明赋值不允许直接使用:

function dd(a = b, b = 3) {}
dd(); //Cannot access 'b' before initialization

a已经赋值,所以b可以使用a变量,下面代码访问正常:

function dd(a = 2, b = a) {}
dd();
  • 变量要先声明后使用
  • 建议使用let/const 而少使用var

学习资源:
学习网址(后盾人):https://www.houdunren.com/
b站视频:https://www.bilibili.com/video/av80536021

上一篇:抖音如何快速起粉


下一篇:表格数据存储,只含有字母,数字和12个特殊字符,逗号分隔,输出每个字段