JavaScripts之变量作用域提升问题
备注:const、let 不存在变量提升问题
1、变量提升(Hoisting)
使用var在函数或全局内任何地方声明变量相当于在其内部最顶上声明它,这种行为称为Hoisting(提升)
注意:变量赋值的位置不会改变
function fn() { console.log(x) // -> undefined var x = 2 }
// 等同于:
function fn() {
var x // 变量提升到函数最顶部
console.log(x)
x = 2 // 赋值的位置不变
}
2. 变量作用域:
·var 变量在函数内部声明,函数中任何位置都能够访问到,不存在 块级 作用域
·如果定义在函数外部,则会提升成为全局变量
2.1>定义在函数内:
function fn() { console.log(a) // undefined console.log(x) // undefined var x = 3 if(x === 3) { var a = 6 } console.log(a) // 6 console.log(x) // 3 } // 等同于下方的方法 function fn() { var x var a console.log(a) // undefined console.log(x) // undefined x = 3 if(x === 3){ a = 6 } console.log(a) // 6 console.log(x) // 3 }
2.2> var定义变量在函数外部:
// test.js var str = 6 // text.html // ...... // ...... // 在浏览器控制台的 console 中输入 str // -> 6
个人站点: devloper.top
-- 自己打败自己是最可悲的失败,自己战神自己是最可贵的胜利 --.