js的 var let const

发布时间 2023-09-26 16:46:48作者: PKGAME

一、简介
二、内容
三、问题

 

一、简介

  js的变量引用,记录下使用的差别。
二、内容

  var  (是variation的简写)是最初js使用的变量声明。

 1    // var 特点
 2     // 声明的变量具有函数作用域,也就是说,变量的作用域限定在声明它的函数内部(函数作用域)或全局范围内(全局作用域)。
 3     // 声明的变量可以被重复声明,而且会发生变量提升(hoisting)现象,即变量可以在声明之前被访问。
 4     // 声明的变量可以被重新赋值。
 5     // 声明的变量可以在 window.变量名 访问到    
 6         
 7     // 声明方法会被提升
 8     test_let_const();
 9     
10     function test_var() { 
11         //因为底下声明了变量所以相当于这里有 var a
12         console.log(a)   // 这里不会报错 会输出undefined 因为下面声明了a, a变量提升了,
13         if (true) {
14             var a = 20; // 同一变量被重新赋值
15             console.log(a); // 输出 20
16         }
17         console.log(a); // 输出 20,因为var具有函数作用域,x在整个函数内部可见
18         var a = 10;
19         
20         var c= 33;
21         console.log(window.c);  // 会输出undefined, 需要全局下声明才能在window访问
22     }
23     var b = 33;
24     console.log(window.b);  // 输出20,windows访问
25     
26     console.log(a); // 不在函数内部,会报错, 程序中断。找不到变量

 

   运行结果:

   const  (是constant的简写)声明常量  let 声明变量     是 ECMAScript 6(ES6)的引入

 1    // const,let 特点
 2     // 声明的变量具有块作用域,大括号里面。
 3     // 声明的变量 不可以 被重复声明,而且 不会 发生变量提升。
 4     // let声明的变量可以被重新赋值, const声明的变量不可被重新赋值,并且必须初始化。
 5     // 声明的变量 不可以 在 window.变量名 访问到    
 6     // 暂时性死区,只要作用域内存在 let、const,它们所声明的变量或常量就自动“绑定”这个区域,不再受到外部作用域的影响。
 7     
 8     // 用于调试方法,让程序执行下去
 9     function try_catch(func){
10         try{
11             func();
12         }catch(e){
13             console.log(e);
14         }
15     }
16     
17     // 声明方法会被提升
18     try_catch(test_let_const_block);
19     console.log("分割线**************************");
20     
21     // 测试 const let 块作用域特点
22     function test_let_const_block(){
23         let a = "方法块的 a";
24         let b = "方法块的 b";
25         if (true) {
26             let a = "判断块的 a";  // 暂时性死区 在内部新声明了个a
27             b = "在内部修改 b";  // 访问到外部块同一变量被重新赋值
28             const c = "判断块的 c"
29             console.log(a); // 输出 "判断块的 a" 作用于内部的a, 不受外部影响
30             console.log(b); // 输出 "在内部修改 b"
31         }
32         console.log(a); // 输出 "方法块的 a"
33         console.log(b); // 输出 "在内部修改 b"  在判断块修改了
34         console.log(c); // 输出 错误,程序中断, 在外部块无法访问内部块的内容
35     }
36     
37     let d = 10;
38     const f = 20;
39     console.log(window.d);  // 输出 undefined let,windows无法访问
40     console.log(window.f);  // 输出 undefined const,windows无法访问

  运行结果:

  有关重复声明:

  有关const 必须初始化

  const 声明不可修改

   const 声明引用内容可修改

 

三、问题