aeipyuan

1.var

作用范围:函数作用域,存在变量提升,即实际解析顺序与编码位置无关(赋值前预解析)。

2.let

作用范围:块级作用域,不存在变量提升,与大多数后端语言一样。

例1:

for (var i = 0; i < 3; i++) {
    setTimeout(function() {
        console.log(i);
    }, 0);
}
//输出3 3 3

原因:var为函数作用域,for遍历只是将i的值不断变化,若把var改成let,则输出0 1 2,由于let为块级作用域,每一个i存在于不同的作用域,每个定时器里面的i不同。

例2:

function fun(n) {
    //var n=undefined;   n=(n=123);
    console.log(n); //123
    var n = 456;
    console.log(n); //456
}
var n = 123;
fun(n);

原因:实际运行顺序如注释所示,函数内部先定义n,然后将形参表的123给n,后赋值456;

例3:

function fun() {
    console.log(fun);
    fun = 456;
    console.log(fun);
}
var fun = 123;
fun();
//报错fun is not a function;

实际执行顺序:

var fun = undefined;
function fun = function;
function fun() {
    console.log(fun);
    fun = 456;
    console.log(fun);
}
fun = 123;
fun(); //报错fun is not a function;

 

分类:

技术点:

相关文章:

  • 2021-09-09
  • 2021-04-14
  • 2018-02-07
  • 2018-10-09
  • 2021-11-15
  • 2021-05-26
  • 2020-04-13
  • 2018-11-26
猜你喜欢
  • 2021-06-25
  • 2020-10-03
  • 2021-04-20
  • 2021-02-26
  • 2021-09-16
  • 2021-04-26
相关资源
相似解决方案