您的位置:首页 > Web前端 > JavaScript

Javascript 之 var、let和const

2020-06-29 04:23 363 查看

Javascript 之 var、let和const

var i = 23 //  向左赋值
console.log(i)
i = [23,3] //  不是强类型语言 可赋值不同的数据类型
// 同时定义并给多个变量赋值
var a=1,b=2
console.log(a,b) // 1  2
console.log(i)
var a //  定义为赋值
console.log(a)  //  undefined

// 没有块级作用域的概念
if(true){
var str = 'hujiajia'
}
console.log(str)

// 变量提升
// 避免在项目中使用这种骚操作
// 解读: 一旦用var 定义变量  该变量就在当前作用域的'最前边'(姑且这样叫吧)  var 变量名   而赋值则在当前行
// 大致可分解为
// 第1行(当前作用域前边, 如if for function等都是有作用域的)  var test
// 第24行  console.log(test)
// 第25行 test = 'test'
console.log(test) // undefined
var test = 'test'

// 特殊情况  函数表达式不存在提升
//func() // 报错
var func = function(){
console.log(123)
}

// 非表达式写法存在提升 并且是能直接调用的
show()  // ss
function show(){
console.log('ss')
}

// 常量
const hh = 12;
// const hh = 23; // 报错
// var hh = 24; // 报错

const obj = {
phone: 110,
arr: [1,2]
}
// const obj = {} // 报错
// 重点来了
obj.phone = 10086
obj.arr = 10086
console.table(obj) // 居然修改成功了 只是针对整个object  但是内部键值对依然可修改

// 存在块级作用域
if(true){
const hujiajia = "hujiajia"
}
// console.log(hujiajia)  // 报错

// 变量提升  const没有变量提升的概念
// console.log(test1)  // 报错
const test1 = "test1"

// let
// 也没有变量提升的概念
// console.log(letlet)  报错
let letlet = 'letlet'

// 存在块级作用域
if(true){
let iii = 'iii'
}
// console.log(iii)  // 报错

// 一道经典面试题 var 与 let
// 用 var
for(var i = 0 ; i<5;i++)
{
(function(){
setTimeout(()=>{
console.log(i)
})
}())
}
// 要想输出 0 1 2 3 4 怎么解决呢  将 var 改为 let 就ok了
for(let i = 0 ; i<5;i++)
{
(function(){
setTimeout(()=>{
console.log(i)
})
}())
}

// 如果要用第一种方法 实现输出 0 1 2 3 4 怎么解决呢
// 将 i 当做实参传进去就ok了
// 有涉及作用域的内容哦
for(var i = 0 ; i<5;i++)
{
(function(i){
setTimeout(()=>{
console.log(i)
})
}(i))
}

一时写博文一时爽,一直写博文一直爽。往后余生,请你把时间用在让自己变强的事上。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: