资讯专栏INFORMATION COLUMN

关于var、let、const

JerryWangSAP / 3220人阅读

摘要:首先,分清楚中存在两种作用域,即全局作用域和方法作用域定义的变量是方法作用域,比如这是在函数中,但是需要注意的是在循环中的问题这个函数中都能访问到,这是我们不期望的,这就是方法作用域的弊端就正好解决了这个问题,它是块级作用域,即内可以访问还

首先,分清楚js中存在两种作用域,即全局作用域和方法作用域
var

var定义的变量是方法作用域,比如:

function() {
    var str = "I am var";
    console.log(str); // I am var
}
console.log(str); // undefined

这是在函数中,但是需要注意的是在for循环中的问题:

function calcute({price: [2,4,3]}) {
    var totalPrice = [];
    for (var i = 0;i < price.length; i++) {
        var finallyPrice = price[i] * 2;
        totalPrice.push(finallyPrice);
    }
    console.log(i); // 3
    console.log(price); // [2,4,3]
    console.log(finallyPrice); // [4,8,6];
}

这个函数中都能访问到i、price、finallyPrice,这是我们不期望的,这就是var方法作用域的弊端

let

let就正好解决了这个问题,它是块级作用域,即{}内可以访问

function calcute({price: [2,4,3]}) {
    let totalPrice = [];
    for (let i = 0;i < price.length; i++) {
        let finallyPrice = price[i] * 2;
        totalPrice.push(finallyPrice);
    }
    console.log(i); // i is not defined
    console.log(price); // [2,4,3]
    console.log(finallyPrice); // finallyPrice is not defined;
}

还需要注意的是:var定义的变量在定义之前访问是undefined,但是let定义变量在定义之前访问会报错Uncaught ReferenceError

const

const和let作用域一致,但是通过const赋值的变量不可再次复制(不是变量本身也不可变,只是不能再次赋值)

const params = {
    count: 3,
    price: 10
}
params.count = 4 // 正常
params = [] // 报错Uncaught TypeError
总结

变量值会改变用let,不会改变用const(一般都是用来表述常量),尽量减少用var

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105598.html

相关文章

  • 关于varletconst的那点事

    摘要:一直使用定义变量,的出现给变量定义增加了两个大将,。声明的变量,块作用域,不重复声明覆盖,限制了变量的作用域,保证变量不会去污染全局变量,所以尽量将改为用。 一直使用var定义变量,ES6的出现给变量定义增加了两个大将let,const。那它们有什么区别呢。 1、const关键字它的作用就是定义一个常量,一旦定义无法更改,不能重复声明覆盖; showImg(https://segmen...

    KavenFan 评论0 收藏0
  • 译:用letconst 来指导JavaScript 的变量提升

    摘要:最近在上看到一篇关于变量提升的文章,原文在此。对于刚入门的开发者时常难以理解变量方法提升的独特行为。接下来我们要谈论,,声明,那么先了解变量提升就显得更为重要了。在进入作用域和不能访问的这段时间,我们称为暂时性死区。 showImg(https://segmentfault.com/img/bV0Nsd?w=800&h=450); 最近在Medium上看到一篇关于变量提升的文章,原文在...

    sanyang 评论0 收藏0
  • Javascript 关于array的使用

    摘要:关于深复制详见其他博文方法数组简单用法方法的参数翻译说传入一个回调函数里面有三个参数当前遍历的元素当前元素的坐标以及遍历的数组还有一个可选参数,在里面使用就是这个值如果未传入,则是根据当前执行环境获取。 Javascript 关于array的使用 来自: https://luoyangfu.com/detail/... 最近做项目经常会使用到数组,尤其在一个中台系统中,数组是尤为常见的...

    zombieda 评论0 收藏0
  • ES2015系列--块级作用域

    摘要:在的闭包中,闭包函数能够访问到包庇函数中的变量,这些闭包函数能够访问到的变量也因此被称为自由变量。在之前最常见的两种作用域,全局作用局和函数作用域局部作用域。 关于文章讨论请访问:https://github.com/Jocs/jocs.... 当Brendan Eich在1995年设计JavaScript第一个版本的时候,考虑的不是很周到,以至于最初版本的JavaScript有很多不...

    darkbug 评论0 收藏0
  • JavaScript ES6相关的一些知识(/letconst/箭头函数/Promise/gene

    摘要:的精髓在于,用维护状态传递状态的方式使得回调函数能够及时调用,比传递要简单灵活的其他方法用于指定发生错误时的回调函数,等同于部分和的区别在发生异常,在中捕获不到能够捕获异常。 ES6是个啥 ECMAScript是国际通过的标准化脚本语言JavaScript由ES,BOM,DOM组成ES是JavaScript的语言规范,同时JavaScript是ES的实现和扩展6就是JavaScript...

    opengps 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<