JavaScript 进阶营

作用域,变量,常量

2018-12-19  本文已影响0人  冰冰啦

1.新的两种变量声明方式


let不能重复声明:

let a = 1
let a = 2 //报错

块级作用域:

if(true){
  var b = 1
}
console.log(b) //b是1
-----------------------------------
if(true){
  let a = 1
}
console.log(a) //报错,a没有定义
--------------------------------------------
//以前的js只有两个作用域:全局作用域和函数级作用域
// let不会变量提升
let a = 2
{
  console.log(a) //报错,a没有定义,只有一个语句块的话,不会打印外部的a
  let a = 1
  console.log(a) //a为1
}
-------------------------------------------------------
//经典应用
for(var i = 0;i< 2;i++){
  setTimeout(function(){
    console.log(i) //打印 2 2,因为i是全局变量,事件循环后i已经变为2
  },1000)
}
-----------------------
for(let i = 0;i< 2;i++){
  setTimeout(function(){
    console.log(i) //打印 0 1,i是for循环内部的变量
  },1000)
}
//对应的es5代码
var loop = functiton(i){
  setTimeout(functtion(){
    console.log(i)
  },1000)
}
for(var i = 0;i< 2;i++){
  loop(i)
}
--------------------------------

定义常量:

const PI = 3.14 //不能重新赋值
PI = 5 //报错
-----------------------------------
//注意
const user = {name: '冰冰'}
user.name = 'jack' //不报错,user引用的地址不能修改,
//但是地址引用的堆内存数据可以修改
user = {name: '天天'} //报错,另开一块内存是不行滴

关于循环

for(let i =0; i < 5; i++) {
  ...
}

这里会形成5个块级作用域

上一篇 下一篇

猜你喜欢

热点阅读