js的 var let const
一、简介
二、内容
三、问题
一、简介
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 声明引用内容可修改
三、问题