Nodejs与ES6系列1:变量声明

摘要:
1.声明变量在JS中,变量的范围是程序中定义变量的区域。变量分为两类,全局变量和局部变量。全局变量的范围是全局的,也就是说,它在JavaScript代码中的任何地方都被定义。函数中声明的变量仅在函数体中定义。它们是局部变量,范围是局部的。函数的参数也是局部变量,仅在函数体中定义。1.1 javascript中var变量声明方法的var关键字声音
1、声明变量

在JS当中一个变量的作用域(scope)是程序中定义这个变量的区域。变量分为两类,全局(global)的和局部的。其中全局变量的作用域是全局性的,即在JavaScript代码中,它处处都有定义。而在函数之内声明的变量,就只在函数体内部有定义。它们是局部变量,作用域是局部性的。函数的参数也是局部变量,它们只在函数体内部有定义。

1.1 var变量声明方式

在javascript中var关键字声明变量具有两个特点,第一变量提升(对变量的定义会默认提前至函数开始处),第二变量没有块作用域只有函数作用域。

(function scope() {
    var i = 10;
    (function innerscope() {
        console.log(i);
        var i = 10;
    })();
})();
=====
undefined

代码1.1.1中,第二个变量i的定义提前至函数innerscope开始位置,因此在console.log(i)的时候i并没有赋值,因此输出结果为undefined。

(function scope() {
    if(true){
        var i =10;
    }
    console.log(i);
})();
=====
10

代码1.1.2中,在if块中定义的变量i在if块外函数内依然可以使用,因此输出结果10.

1.2 let声明变量方式

在ES6的标准中,新引入了let关键字用于声明变量,let关键字与var关键字不同在于let为块作用域。 将1.1.2中代码定义变为let后,程序则不能执行。

代码 1.1.2

(function scope() {
    if(true){
        let i =10;
    }
    console.log(i);
})();
=====
i is not defined

1.3 const声明变量方式

const用来声明常量,一旦声明,其值就不能改变,并且const定义的变量为块作用域,比如1.3.1和1.3.2这样编写代码是会出错的。

代码1.3.1

(function scope() {
    if(true){
        const pi =3.14;
    }
    console.log(pi);
})();

=====
pi is not defined

代码1.3.2

(function scope() {
    const pi = 3.14;
    pi=3;
    console.log(pi);
})();

免责声明:文章转载自《Nodejs与ES6系列1:变量声明》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇前端入门flutter-06 ListView基础列表组件、水平列表组件、图标组件Jquery Ztree异步加载树下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# 获取枚举集合的其中两种方式

可能会在下面的场景中需要循环枚举值 1、为方便前端展示,将返回的数据集合中的枚举名称显示出来。这样前端不需要做任何处理,直接展示即可。 2、向前端输出枚举集合,用于数据筛选,并且前端不需要维护这些集合。后端有修改也不需要通知前端。 方式一: var dict = new Dictionary<int, string>(); var values...

cent上新版node的安装

其实本来很简单的一件事,结果因为某些问题,搞的超复杂。 曲折过程如下: 正常来说 yum install nodejs -y 是可以直接按照node的一个旧版本,大概是 v6.4左右。但是现在很多程序已经不支持了。 所以这里通过其中的一个node的 n模块进行更新。 正常来说,下面三行就搞定了。。。 yum install nodejs -y npm i...

Robot Framework操作

Robot Framework 介绍 RobotFramework是一款基于python的开源自动化测试框架,遵守Apache License 2.0协议,在此协议下所有人都可以免费开发和使用。因为Robot Framework 是灵活和可扩展的,所以它很合适用于测试具有多种接口的复杂软件:用户接口,命令行,web service,编程接口等。RF提供很多...

线程池阻塞队列之LinkedBlockingQueue

LinkedBlockingQueue介绍 LinkedBlockingQueue是一个单向链表实现的阻塞队列。该队列按 FIFO排序元素,新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。 此外,LinkedBlockingQueue可以指定队列的容量。如果不指定,默认容量大小等于Integer.MAX_VALUE。 LinkedBloc...

Cannot find module '@babel/core'

错误信息 error in ./src/main.js Syntax Error: Error: [BABEL] F:\webstorm_space\iwts\src\main.js: Cannot find module '@babel/core'Require stack: - F:\webstorm_space\iwts\node_module...

Mysql 命令行下建立存储过程

建立存储过程的sql如下: CREATE PROCEDURE  proc_variable () BEGIN DECLARE dec_var_ VARCHAR(100); DECLARE rep_num INT; DECLARE dec_var CURSOR  for SELECT ID_  FROM ACT_RU_VARIABLE WHERE NAME...