zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    Swift -- 8.3 多态
    Swift -- 8.2 类的构造与析构
    Swift -- 8.1 继承
    Swift -- 7.6 构造器
    Swift -- 7.5 类型属性,方法
    Swift -- 7.4 方法,下标,可选链
    Swift -- 7.3 类和结构体
    Swift -- 7.2 枚举
    Swift -- 7.1 面向对象简介
    4-5轮选区的不透明度1.7
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/12638623.html
Copyright © 2011-2022 走看看