• var、let区别(变量提升、作用域)


    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;
  • 相关阅读:
    第一次作业
    C语言I博客作业04
    C语言I博客作业05
    c语言l博客作业02
    C语言I博客作业06
    linux下递归删除目录下所有exe文件
    CSS高级
    CSS样式
    CSS框模型
    Oracle的用户、角色和权限
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/12638623.html
Copyright © 2020-2023  润新知