梦应逍遥 发表于 2024-12-23 03:30:16

JS 中的作用域与变量提拔

JS中有两种作用域 一个是全局作用域 一种是函数作用域
全局作用域声明的属性 那里的可以访问
console.log(a) //undefind
var a = 0
vat b = 1
console.log(a) // 0 函数作用域中声明的属性只能在函数中访问(假如在外部访问就会爆错)
console.log(a) // Uncaught ReferenceError: a is not defined
function fun() {
    console.log(a) // undefind
    var a = 0;
    console.log(a) // 0
}    关于JS中的变量提拔
 变量提拔的概念值的是将变量的声明和方法的定义放到最上面,例如:
console.log(a, fun1, fun2) // undefind, function, undefind

const a = 0;

function fun1() {
   console.log('fun1')
}

var fun2 = function() {
    console.log('fun2')
} 上面的代码中,在代码中 a 定义之前就能够访问到 a ,但是输出的是undefind, 这是因为它只会将变量的定义进行提拔,而赋值不会;fun1 是一个方法,会直接提拔到最上面,所以能在最最上面输出,而fun2是一个变量,它和a一样只会将定义提拔;
   特殊的let 和 const
虽然这两个也存在变量提拔,但是提拔之后并不能直接访问 ,会存在临时性死区
console.log(a) //ReferenceError: Cannot access 'a' before initialization
let a = 1;
const b = 2;  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: JS 中的作用域与变量提拔