javascript ES6变量的作用域

javascript ES6变量的作用域

1. 全局
2. 局部
3.

例1

let a = 123 ;   // 全局变量
const b = 3 ;   // 全局常量
var c = 0 ;     // 全局变量
console.log(c)  // 0
// console.log(d)  // not defined
function test(e = 1)
{
  // 或者 let d, 对于整个js文件来说 d 的作用域为test方法体中, 
  // 若外部有同名变量 和它无关  除非省略关键字 var / let 才是全局变量
  var d ; 

  // e 为参数 根据就近原则  a、b变量先扫描 test方法中是否有定义,
  // 没有则向父级作用域找 再找不到就报未定义 not defined
  d = a + b * e ;

  console.log(`in function: a = ${a}, b = ${b}, c = ${c}`) ;
  console.log(`in function: d = ${d}\n\n`) ;

  return d ;
}

// 将方法 test(5) 返回值 赋给 c
c = test(5) ;  // 138

console.log(`outer: a = ${a}, b = ${b}, c = ${c}`) ;
// 当前作用域(此时作用域 为全局) 为定义 d 这个变量  
// 报 d is not defined
console.log(`outer: d = ${d}`) ;

例2

// 块级作用域
if (true) {
  let a = 100
}
// console.log(a) // a is not defined

{
  // 类似 静态代码块  命名空间等概念 
  let b = 12
}

// console.log(b)  // b is not defined

for (let ii = 0; ii < 5; ii++) {
  // 题外话
  // 用 let 不用var可以解决闭包传参时丢失的问题
  // 经典面试题  将 var 改为 let 输出 0 1 2 3
  // for (var jj = 0; jj < 4; jj++) {
  //   setTimeout(()=>{
  //     console.log(jj);
  //   }, 10)
  // }

}
// console.log(ii)  // ii is not defined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值