美文网首页
var 与let

var 与let

作者: 小蜜蜂_1d30 | 来源:发表于2022-06-23 13:27 被阅读0次

1.声明提升

 console.log(a)
//Uncaught ReferenceError: a is not defined
此时报错a 没有定义

使用var 声明变量,声明会提升到顶部

console.log(b)
var b = 12
console.log(b)
输出的结果依次是:undefined 12 12
//等价于 
var b
console.log(b)
b=12
console.log(b)
             

使用let 声明变量不会提前

console.log(c)
let c=121
console.log(c)
代码报错c没有被定义,代码不会往下执行

在函数内部用var声明变量,只会提升到函数内部的最顶部

function add(a,b){
  var sum = a+b;
  return sum;
}
var sum1= add(1,2);
var sum2 = add(3,4);
//等价于
var sum1
var sum2
function add(a,b){
   var sum
   sum = a+b;
  return sum
}
sum1 = add(1,2)
sum2 = add(3,4)

2.作用域

var 声明的变量只有函数能限制他的范围,作用域是函数作用域

if(true){
  var a = 1;
}
console.log(a)
输出结果1
var dd =11
{
   var dd =1;
  console.log(dd)
}
console.log(dd)
输出结果: 1 1

function f(){
  var a = 12
}
console.log(a)
报错:ff 没有定义,代码不会往下执行

let声明的变量任何花括号都可以限制其声明范围,作用域是块级作用域

if(true){
   let a = 11;
}
console.log(a)
报错a 没有定义

let aa= 12
{
  let aa = 1
 console.log(aa)
}
console.log(aa)
//输出结果: 1 12

function f(){
  let a =12;
}
console.log(a)
报错asd没有定义

3.for循环中的setTimeout的区别

for(var i=0;i<3;i++){
   console.log(i);
   setTimeout(function(){
     console.log(i)
   },1000)
}
等价于
var i
for(i=0;i<3;i++){
   console.log(i);
   setTimeout(function(){
     console.log(i)
   },1000)
}
输出结果: 0 1 2  
隔1,2,3秒 输出3(输出3次)
for(let i=0;i<3;i++){
   console.log(i);
   setTimeout(function(){
        console.log(i)
    },1000)
}
等价于
{
    let i=0;
    console.log(i);
     setTimeout(function(){
          console.log(i)
     },1000)
}
{
    let i=1;
    console.log(i);
     setTimeout(function(){
          console.log(i)
     },1000)
}
{
    let i=2;
    console.log(i);
     setTimeout(function(){
          console.log(i)
     },1000)
}
输出结果: 0 1 2
隔1秒以后分别输出 0 1 2 

4.重复声明

  var a =1;
  var a =2;
不会报错,var 声明的变量可以重复声明
let a =1;
let a =2;
报错 ,let声明的变量不可以重复声明,会报重复声明的错误

5.全局对象属性

var 全局声明的变量可以绑定在window上,直接window.***可以拿到该数据,let声明的变量,用window.****是undefined

var a = 12;
window.a
//输出12

function add(a,b){
    var sum = a+b;
    return sum;
}
window.add(1,2)
//输出:3
let a = 12;
window.a
//undefined

6.总结

let 是ES6新增的语法,var是老语法,今后代码中尽量全部用let ,弃用var.因为var有上面这些不好的特性。
区别总结:
1.var 会声明提升,let 不会
2.var 是函数作用域,let 是块级作用域
3.var 允许重复声明,let 不会
4.var 声明的全局变量,会成为全局对象的属性,let不会

相关文章

  • 第二章 let 和 const 命令

    // let 与 var /* 一 */ { let a =12; var b =10; } //...

  • ES6-let & const

    一. let与var let 是块级作用域;var 是函数级作用域。 二. let 与 const let与con...

  • 关于ES6的let命令

    1、let的基本用法以及let和var的区别 (1) let与var一样是用来声明变量的,与var的区别是let所...

  • ES6_var、let与const

    var,let 与 const var 申明变量。 let 申明变量,更完美的 var。 const 申明常量(物...

  • let 与 var

      ECMAScript 6 中新增了 let 命令来声明变量,它的用法类似于 var,但是 let 所声明的变量...

  • var与let

    1、var定义变量 1.1 不指定类型定义变量 //定义变量(不指定类型变量),使用var关键字var x = 1...

  • var与let?

    首先我们来看一道面试题 通常,你以为这不就是一个for循环吗?结果肯定是123456了,但是却发现答案是55555...

  • var 与let

    1.声明提升 使用var 声明变量,声明会提升到顶部 使用let 声明变量不会提前 在函数内部用var声明变量,只...

  • 20190301 es6学习—let和const命令

    let命令 let与var之间的不同 声明变量的作用域 作用:声明变量 类似var与var的区别:var声明的变量...

  • ES6之let/const/var

    let与var let声明的变量有严格局部作用域,var会越域 let只能声明一次变量,var可以多次声明 let...

网友评论

      本文标题:var 与let

      本文链接:https://www.haomeiwen.com/subject/wsmpvrtx.html