let / const 细节版

var / let / const

  • var 关键字,声明一个 function scope 变数
  • let关键字,声明一个 block scope 变数
  • const关键字,声明一个 block scope 常数
console.log('用var关键字 定义变数')
var i='全域变数';
console.log(`i=${i}`);  
//`i=${i}` 等价於 'i='+i 字串连接
// ` 反引号在~键上面 (我一开始还找不到,所以特别写这行)

console.log("I'm in the function")
function fun(){
	var i='function内变数';
	console.log(`i=${i}`)
};
fun(); 
        
console.log("I'm out of the function")
console.log(`i=${i}`);  
        
console.log("I'm in the for loop")
for(var i=0;i<5;i++){
	console.log(`i=${i}`) 
}  //i=5离开for回圈

console.log("I'm out of the for loop")
console.log(`i=${i}`); 

甚麽是 function scope,讲人话就是:

var关键字令出的变数,他的有效范围以function界定。

  • function外,听 全域window
  • function内,听function的,function内找不到变数,才往全域window

好的,那我们现在来对一下刚刚上面的答案。

用var关键字 定义变数
i=全域变数
I'm in the function
i=function内变数
I'm out of the function
i=全域变数
I'm in the for loop
i=0
i=1
i=2
i=3
i=4
I'm out of the for loop
i=5

离开for loop後,我们再次呼叫变数i,得到的答案是:5。

原因是for loop 不是function,会影响到在全域var定义的变数i

为了解决这个问题,我们有了letconst,他们的变数有效范围以 {}界定。来看看他的效果~

console.log('用let关键字 定义变数')
let k='全域变数';
console.log(`k=${k}`);

console.log("I'm in the function")
function fun(){
	let k='function内变数';
	console.log(`k=${k}`)
};
fun();
        
console.log("I'm out of the function")
console.log(`k=${k}`);
        
console.log("I'm in the for loop")
for(let k=0;k<5;k++){
	console.log(`k=${k}`)
}
        
console.log("I'm out of the for loop")
console.log(`k=${k}`)
用let关键字 定义变数
k=全域变数
I'm in the function
k=function内变数
I'm out of the function
k=全域变数
I'm in the for loop
k=0
k=1
k=2
k=3
k=4
I'm out of the for loop
k=全域变数

这次我们离开for loop後,我们再次呼叫变数i,得到的答案是:全域变数。

因为变数i是用let定义的,他的变数有效范围靠{}界定,而for loop 就有{}

var 和 let还有一个不同 - 重复宣告 会出的问题

let、const不能重复宣告,会报错

var a=1
var a="haosjdoija";
let a=1
let a="haosjdoija";
//Uncaught SyntaxError: Identifier 'a' has already been declared

<<:  Day21:Hot Flow - SharedFlow

>>:  [Day 21] Leetcode 560. Subarray Sum Equals K (C++)

Raspberry pi 的影片拍摄- Python

开门见山 是code import picamera camera = picamera.PiCam...

[Day29] Vue3 - 事件绑定

在 Javascript 中会用 onclick, onchange...等方式监听 DOM 物件,...

用心看待这个世界

从第一份工作开始跟同事们保持着不冷也不热的距离,毕竟在工作上带着太多私情做事上有些时候会很难进行。不...

D22 - 用 Swift 和公开资讯,打造投资理财的 Apps { 台股成交量实作.2 }

上一篇在 TwMarketTradingInfoManager 完成了拿取大盘成交量的 API,接下...

JavaScript学习日记 : Day21 - 数组方法(一)

在前端的日常开发中,数组使用的频率非常高,所以充分熟悉各种常见的方法後,能提升工作的效率。 1. 基...