交流群:462197261站长百科站长论坛热门标签收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
点击这里给我发消息
  • 当前位置:
  • 了解JavaScript中let语句

    使用let语句,允许你在JavaScript中创建块范围局部变量。let语句是在JavaScript的ECMAScript 6标准中引入的。

    在你往下了解let语句之前,我建议你先查看基于Infragistics jQuery库的Ignite UI,它可以帮助你更快地编写和运行Web应用程序。你可以使用JavaScript库的Ignite UI来快速解决HTML5,jQuery,Angular,React或ASP.NET MVC中复杂的LOB需求。(你可以在这里下载Ignite UI的免费试用版。)

    在ECMAScript 6之前,JavaScript有三种类型的范围:

    • 全局范围
    • 函数范围
    • 词汇范围

    为了详细探索let语句,请细想下面的代码段:

    function foo() {
    var x = 9;
    if (x > 5) {
    var x = 7;
    console.log("Value of x in if statement = " + x);
    }
    console.log("Value of x outside if statement = " + x);
    }
    foo();

    以上代码得到的输出:

    在上面的代码中,我们使用var语句声明变量x。因此,变量x的范围是函数范围。if语句内的变量x 就是if语句外创建的变量x 。因此,在你修改if语句块内变量x的值时,也会修改函数中变量x的所有引用的值。

    为了避免这种情况,你需要使用块级别范围,let语句允许你创建块范围的局部变量。

    修改上面的代码片段,使用let语句声明变量:

    function foo() {
    var x = 9;
    if (x > 5) {
    let x = 7;
    console.log("Value of x in if statement = " + x);
    }
    console.log("Value of x outside if statement = " + x);
    }
    foo();
    

    在上面的代码段中,我们使用let语句来声明范围级局部变量x。因此,在if语句内更新变量x的值不会影响if语句外的变量x的值。

    下面是上述代码的输出:

    与使用函数范围(或全局范围)声明的变量不同,使用let声明的变量是块范围的:它们只存在于它们定义的块中。

    变量提升

    使用let声明的变量提升不同于使用var声明的变量。因此,使用let声明的变量没有变量提升,这意味着使用let声明的变量不会移动到执行上下文的顶部。

    为了更好地理解这一点,请看以下这段代码:

    function foo() {
    console.log(x);
    console.log(y);
    var x = 9;
    let y = 67;
    }
    foo();

    作为输出,你将获得变量y的ReferenceError,变量y使用let语句声明。使用let声明的变量不会提升到执行上下文之上。

    重新声明变量

    你不能在同一个函数或块中使用let重新声明一个变量。这样做会出现语法错误。请看以下代码:

    function foo() {
    if(true){
    let x = 9;
    let x = 89; 
    }
    }
    foo();

    运行上面的代码会出来一个语法错误,如下所示:

    暂时性死区

    有时,使用let声明的变量会导致暂时性死区。在以下代码中,let x=x+67 将抛出x未定义的异常。

    之所以会出现这个错误,是因为表达式(x + 67)求的是if块范围内局部变量x的值,而不是函数范围内局部变量x的值。运行上面的代码,你会得到这样一个异常:

    你可以通过移动声明变量到表达式的上面一行来修复上述错误,如下所示:

    块级范围界定是任何编程语言最重要的功能之一,并且随着ECMAScript 6中let语句的引入,JavaScript现在也有了这个功能。使用let语句,允许创建一个作用域在块范围内的变量。这可以解决许多问题,例如全局范围变量的意外修改,闭包中的局部变量,以及帮助编写更清晰的代码。

    英文原文:Easy JavaScript, Part 1: Learn the 'let' Statement

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持北冥有鱼。

    您可能感兴趣的文章:

    • 了解javascript中let和var及const关键字的区别
    • 详解js中let与var声明变量的区别
    • servlet+jsp实现过滤器 防止用户未登录访问
    • 基于Eclipse 的JSP/Servlet的开发环境的搭建(图文)
    • 5分钟快速掌握JS中var、let和const的异同
    • JavaScript中var、let、const区别浅析
    • js中let能否完全替代IIFE

    广而告之:
    热门推荐:
    JavaScript中文件上传API详解

    对于Web程序员来说,在网页上处理文件上传,总是一件很麻烦的事情。在过去,我们不能够通过拖拽上传图片,也没有复杂Ajax上传技术,很少处理多文件批量上传。我们也无法获取上传过程中的信息,除非上传完成后从服务器端获得。有时候,等你上传完毕后才发现上传的文件不合适! ···

    Zero Clipboard js+swf实现的复制功能使用方法

    开发中经常会用到复制的功能,在 IE 下实现比较简单。但要想做到跨浏览器比较困难了。本文将介绍一个跨浏览器的库类 Zero Clipboard 。它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的 document.execCommand("Copy") 更加灵活。 Zero Clipbo···

    帝国cms导航栏目出现当前栏目下的三级栏目并高亮显示

    需要 [月费会员] 级别以上才能查看。 您还未登陆,登录点击这里进行登陆操作;注册请点击这里。

    Bootstrap jquery.twbsPagination.js动态页码分页实例代码

    Bootstrap风格的分页控件自适应的: 参考网址:分页参考文档 1.风格样式: 2.首先引入js文件jQuery.twbsPagination.js <span style="font-size:14px;"><script type="text/javascript" src="plugins/page/jquery.twbsPagination.js"></script></span>···

    Async Validator 异步验证使用说明

    async-validator 是一个异步验证的库,需要传入要验证的数据和验证规则 官方链接 https://github.com/yiminghe/async-validator 要检验的数据,格式要求如下: { a:xxx, b:xxx } 检验规则定义格式如下: { a:[ {验证规则, message: 'xxx'}, {验证规则, message: 'xxx'···

    织梦判断某字段为空就显示自定义的内容

    有时候织梦自定义字段,如果没有值的时候要显示指定的默认内容,该如何操作 {dede:field name='jiage' runphp='yes'}       if(@me=='')     { @me = '' ;}   ···

    Asp.Net设计模式之单例模式详解

    本文为大家分享了Asp.Net设计模式之单例模式,供大家参考,具体内容如下 一、设计目的:让项目中只显示一个实例对象 二、设计步骤: 创建一个类; 构建类类型静态变量; 定义返回值类为单例类型的静态方法; 判断静态变量instance是否为空:如果为空,就创建实例,然后给单例类···

    python编写softmax函数、交叉熵函数实例

    python代码如下: import numpy as np # Write a function that takes as input a list of numbers, and returns # the list of values given by the softmax function. def softmax(L): pass expL = np.exp(L) sumExpL = sum(expL) result = [] for i in expL: res···

    配置php.ini实现PHP文件上传功能

    昨天分享了在PHP网站开发中如何在php.ini中配置实现session功能的PHP教程,今天继续分享在利用PHP实现文件上传功能时几点关键php.ini的配置。   说到在php.ini中的文件上传的配置,其实在之前介绍PHP文件上传功能代码实例教程以及Jquery AjaxUpload实现文件上传功能代码实例···

    jQuery旋转木马式幻灯片轮播特效

    本文为大家分享anoSlide是一款超轻型响应式jQuery旋转木马幻灯片插件,它适合在PC端与移动端实现旋转木马幻灯片特效。具体内容如下 特点 响应式——适应任何视窗的宽度 混合内容 不需要CSS 轻量级(< 8 kb未压缩) 基于jQuery构建 集成图像预加载 回调函数——onConstruct onStar···