2021.06.22(js中的变量声明问题)
var 声明变量
函数内部未使用var声明
function test1() { message1 = '跃码教育' } // 函数内部声明变量,未使用var声明,那么变量会成为全局变量 // 函数执行之后,message1会成为全局变量 test1() console.log(message1) //跃码教育
函数内部先使用,后用var声明
function test2() { console.log(auth) var auth = '跃码教育' } // 在函数内部通过关键字var声明的变量会提升到函数作用域顶部 // test2和test3等价 test2() //undefined
等价示例
function test3() { var auth console.log(auth) auth = '跃码教育' } // test2和test3等价 test3() //undefined
let 声明变量
错误示例
if (true) { let title = '跃码教育-js变量作用范围' } console.log(title) //Uncaught ReferenceError: title is not defined
暂时性死区
let 与 var 的另一个重要的区别,就是 let 声明的变量不会在作用域中被提升。
在解析代码时, JavaScript 引擎也会注意出现在块后面的 let 声明,只不过在此之前不能以任何方
式来引用未声明的变量。在 let 声明之前的执行瞬间被称为“暂时性死区”( temporal dead zone),在此
阶段引用任何后面才声明的变量都会抛出 ReferenceError
全局声明
与 var 关键字不同,使用 let 在全局作用域中声明的变量不会成为 window 对象的属性( var 声明的变量则会)
var auth = '跃码教育' console.log(window.auth) //教育 let auth2 = '跃码教育' console.log(window.auth1) //undefined
经典问题
for (var i = 0; i < 5; ++i) { setTimeout(() => console.log(i), 0) }
2021-06-22 14:10:46