美文网首页
Js中的(H0isting)机制及ES6中的let声明

Js中的(H0isting)机制及ES6中的let声明

作者: 莫晓白 | 来源:发表于2017-10-18 21:36 被阅读0次

提升机制:通过var声明的变量都会在当前作用域中提升到作用域顶部。
上代码

function getValue(isTrue) {

        if (isTrue) {

            var value = 'blue';

            return value;
        }
        else {

            console.log(value);

            return null;
        }
    }

当我们运行这行代码的时候

console.log(getValue(true));
图片.png

然后我们将true 变成 false

console.log(getValue(false));

理论上,我们的代码会报错,因为,我们会访问一个没有创建的变量,这会引起系统的报错

图片.png

系统并没有报错,而是给我们打印出了一个undefined

这是因为系统悄悄的将我们的声明提前了,我们的代码实际上是被改成了这样

    function getValue(isTrue) {

        var value;

        if (isTrue) {

            value = 'blue';

            return value;

        }
        else {

            console.log(value);

            return null;
        }
    }

在实际的运行中,我们的value变量在执行if语句之前就已经被创建了,但是,并没有赋值。所以我们在else是可以访问到value,因为value只是被创建了并没有赋值所以我们会显示一个undefined。而这就是声明提前。

换句话说就是,变量的声明被提至函数顶部,初始化操作依旧在原位置执行。

在ES6中为了强化变量生命周期,ES6引入块级作用域的概念,通过let声明不在让变量提前声明。

function getValue(isTrue) {

        if (isTrue) {

            let value = 'blue';

            return value;

        }
        else {

            console.log(value);

            return null;
        }
    }

我们让isTrue为false运行一次

图片.png

我们只改变了var关键字,就可以让变量value在if块中声明并赋值,如果isTrue为false,那么永远也不会声明并初始化变量value。

禁止重复声明相同变量!
在同一个作用域中,不可以通过var 和 let声明相同的变量

function getValue(isTrue) {

            var value = 'red';

            let value = 'blue';

            return value;
    }
图片.png

当然我们在不同的作用域中,就可以使用相同的变量名

 function getValue(isTrue) {

        var value = 'red';

        if (isTrue) {

            let value = 'blue';

            return value;

        }
        else {

            console.log(value);

            return null;
        }
    }

我们让isTrue 为真

图片.png

这里面存在两个value ,但是两个value的作用域不同,所以相同的名字可以在不同的作用域中重复声明。
值得注意的是,let 声明的变量value只能在if作用域中访问,出了这个作用域的的时候let声明的 value就被销毁掉。var 声明的value还可访问。

相关文章

  • Js中的(H0isting)机制及ES6中的let声明

    提升机制:通过var声明的变量都会在当前作用域中提升到作用域顶部。上代码 当我们运行这行代码的时候 然后我们将tr...

  • ES6

    一、let和const 1.let 在 js/es6 中,用let在for循环中声明的变量,在外部无法访问 let...

  • js 中声明常量关键字 var、let、const

    js 中声明常量的关键字:var、let、const,其中 let 和 const 是 ES6 中新增的关键字。 ...

  • 2018-09-04

    js变量和常量 JS中与变量常量声明相关的关键字有var、let以及const,其中let和const是ES6的新...

  • JS var、let、const对比

    JS原先声明变量使用var;ES6中引入let和const用来扩展声明变量 (1)使用var声明的变量,作用域为该...

  • javaScript中var于let区别

    ES6引入let关键字,在JS中var 与let都是用来声明变量,var没有块级作用域,let有。let因为有了块...

  • 深入理解ES6一

    let声明 Es6中引入块级声明,let声明的变量作用域限制在代码块中; let声明不会被提升; 在同一作用域中不...

  • let 和 const 命令

    ES6学习笔记1、let命令ES6中新增了let,用于声明变量,与var类似,但let声明只是在其block(块)...

  • ES6中的let和const命令

    ES6中的let和const命令 let命令 ES6 新增了let命令,用来声明变量。它的用法类似于var,但是...

  • ES6(let 与 const)

    ES6中引入了let 和 const来声明变量,我们来看下let 和 const 的使用 一、let let定义的...

网友评论

      本文标题:Js中的(H0isting)机制及ES6中的let声明

      本文链接:https://www.haomeiwen.com/subject/rjxyuxtx.html