javaScript 中 let var const 的区别

var 声明

  • 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;
  • 声明变量为全局, 可重复声明变量,可以再次赋值;
var str ;       // undefined
str = 'string'  // 'string'

if(true){
    var str = 'S' ;
    var num = 0
}

console.log(str) // 'S'
console.log(num) // 0

let 声明

  • 使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;
  • 存在作用域死区; 可以再次赋值;
  • 只能再当前块级作用域中访问 ( {  } 为界限 )  ,
let str ;       // undefined
str = 'string'  // 'string'

if(true){
    // Uncaught SyntaxError: Identifier 'str' has already been declared
    let str = 0 ;  // 已声明标识符 “str”
    
    let num = 0 
}

console.log(str) // 'string'
console.log(num) // Uncaught TypeError: Cannot read properties of undefined
var i = 0;
var arr = []
for(let i =0; i<5;i++){
 // let 不会对全局变量造成影响
    arr.push( function(){ return i } )
}
arr.forEach(i=>{
    console.log( i() )     // 0 1 2 3 4
})

const 声明

  • 使用const声明的是常量,在后面出现的代码中不能再修改该常量的值;
  • 存在作用域死区,且声明之后必须赋值;
  • 和 let 一样同样存在块级作用域 ( {  } 为界限 ) ;
{
const str ;     
// Uncaught SyntaxError: Missing initializer in const declaration
// 常量声明中缺少初始值设定项
}

{
const str = ''
str = 0
// Uncaught TypeError: 无法分配给常量变量
}


if(true){
    const str = 'String' ;
    var num = 0 
}

console.log(num) // 0
console.log(str) // Uncaught TypeError: Cannot read properties of undefined

let 和 const 存在作用域死区

  • 读取变量时如果当前的块级作用域 存在这个变量会读取当前作用域的变量
  • 而let 和 const 声明的不存在变量提升 就会引起报错;
var str = ''
function fn(){
    // Uncaught ReferenceError: Cannot access 'str' before initialization at fn
    // 不能在fn中初始化之前访问“str”
    console.log(str) 
    // 以上为作用域死区 
    let str = 456
    // 此处 let 或 const 都会引起报错 
}
fn()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值