Js基础知识-作用域和自由变量

2020-04-16  本文已影响0人  小恐龙yaya

作用域

一个思考题

   let i, a
    for (i = 0; i < 10; i++) {
      a = document.createElement('a')
      a.innerHTML = i + '<br/>'
      a.addEventListener('click', function (e) {
        e.preventDefault()
        alert(i)
      })
      document.body.appendChild(a)
    }

带着这个问题我们来看一下作用域和自由变量。

作用域

一张图带你认知作用域。


作用域.png

作用域有哪些?

  1. 全局作用域
    上述例子中 变量a就是全局作用域,在任意地方都可以使用。
  2. 函数作用域
    函数作用就是只能在当前函数中使用,例如a1只能在fn1中使用,超出就不能使用。
  3. 块级作用域
    块级作用域只能在当前的块中使用,超出当前块就会报错,例如以下例子。
    if (true) {
      let x = 100
    }
    console.log(x) // x is not defined

使用var声明遍历会造成变量提升,所以建议在写代码时尽量使用let,const

关于var的变量提升,如果刚才块级作用域简单修改一下,打印的值就不一样,原因就是因为把声明a提升到了最顶部,之后赋值。

    if (true) {
      var x = 100
    }
    console.log(x) // 100

变量提升后,这样看的话就会一目了然。

    var a
    if (true) {
      x = 100
    }
    console.log(x) // 100

自由变量

   let  a
    for (let i = 0; i < 10; i++) {
      a = document.createElement('a')
      a.innerHTML = i + '<br/>'
      a.addEventListener('click', function (e) {
        e.preventDefault()
        alert(i)
      })
      document.body.appendChild(a)
    }
上一篇 下一篇

猜你喜欢

热点阅读