JS 中的作用域与变量提拔

打印 上一主题 下一主题

主题 529|帖子 529|积分 1587

JS中有两种作用域 一个是全局作用域 一种是函数作用域
  全局作用域声明的属性 那里的可以访问
  1. console.log(a) //undefind
  2. var a = 0
  3. vat b = 1
  4. console.log(a) // 0
复制代码
函数作用域中声明的属性只能在函数中访问(假如在外部访问就会爆错)
  1. console.log(a) // Uncaught ReferenceError: a is not defined
  2. function fun() {
  3.     console.log(a) // undefind
  4.     var a = 0;
  5.     console.log(a) // 0
  6. }
复制代码
   关于JS中的变量提拔
   变量提拔的概念值的是将变量的声明和方法的定义放到最上面,例如:
  1. console.log(a, fun1, fun2) // undefind, function, undefind
  2. const a = 0;
  3. function fun1() {
  4.    console.log('fun1')
  5. }
  6. var fun2 = function() {
  7.     console.log('fun2')
  8. }
复制代码
上面的代码中,在代码中 a 定义之前就能够访问到 a ,但是输出的是undefind, 这是因为它只会将变量的定义进行提拔,而赋值不会;fun1 是一个方法,会直接提拔到最上面,所以能在最最上面输出,而fun2是一个变量,它和a一样只会将定义提拔;
   特殊的let 和 const
  虽然这两个也存在变量提拔,但是提拔之后并不能直接访问 ,会存在临时性死区
  1. console.log(a) //  ReferenceError: Cannot access 'a' before initialization
  2. let a = 1;
  3. const b = 2;
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表