JavaScript var、let、const

var申明的变量是有作用域的

如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量:

‘use strict‘;

function foo() {
    var x = 1;
    x = x + 1;
}
x = x + 2; // ReferenceError! 无法在函数体外引用变量x
 

由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行:

‘use strict‘;

function foo() {
    var x = 1;
    function bar() {
        var y = x + 1; // bar可以访问foo的变量x!
    }
    var z = y + 1; // ReferenceError! foo不可以访问bar的变量y!
}

JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:

‘use strict‘;

function foo() {
    var x = ‘Hello, ‘ + y;
    console.log(x);
    var y = ‘Bob‘;
}

foo();
局部作用域

由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的:

‘use strict‘;

function foo() {
    for (var i=0; i<100; i++) {
        //
    }
    i += 100; // 仍然可以引用变量i
}
let :局部作用变量
为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量:

‘use strict‘;

function foo() {
    var sum = 0;
    for (let i=0; i<100; i++) {
        sum += i;
    }
    // SyntaxError:
    i += 1;
}

const:常量

常量

由于varlet申明的是变量,如果要申明一个常量,在ES6之前是不行的,我们通常用全部大写的变量来表示“这是一个常量,不要修改它的值”:

var PI = 3.14;

ES6标准引入了新的关键字const来定义常量,constlet都具有块级作用域:

‘use strict‘;

const PI = 3.14;
PI = 3; // 某些浏览器不报错,但是无效果!
PI; // 3.14

详细请参考:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014344993159773a464f34e1724700a6d5dd9e235ceb7c000

原文地址:https://www.cnblogs.com/donke/p/10015174.html

时间: 2024-08-30 09:27:32

JavaScript var、let、const的相关文章

javascript中var、let和const的区别

在javascript中,var.let和const都可以用来声明变量,那么三者有什么区别呢?要回答这个问题,我们可以从先想想:三种不同的声明会影响变量的哪些方面?这些方面也就是变量的特性,那么变量有哪些特呢?无非就是两个:一个是变量的数据类型,是数字,字符串还是数组或者其他的,另一个就是变量的作用域,是全局的还是局部的,又或者是某个代码块的.因此我们可以从以下两个方面来探究三种声明方式的区别: 1.声明后变量的数据类型有什么不同? 2.声明后变量的作用域有什么不同? 先看第一个方面,数据类型有

面试官竟然问我JavaScript中var、let和const有什么区别?

在JavaScript中有三种声明变量的方式:var.let.const. 目录1.var let const1.var(1)var定义的变量在之后可以修改,如果不初始化会输出undefined,不会报错. var a;console.log(a); // undefined// -----------------------------console.log(a); // undefinedvar a = 1;12345(2)var定义的变量,可以跨块访问, 不能跨函数访问. (3)var只有

关于var、let、const的故事

对于一门编程语言来说,变量与常量是再正常不过的两种,JavaScript是一直解释型的弱类型语言. JavaScript中变量或者常量可以用var.let.const(后两者是ES6的新特性). 1.let.const基本用法 只在声明所在的块级作用域内有效 { let a = 1; var b = 1; const c = 1; } a//Uncaught ReferenceError: a is not defined b//1 c//Uncaught ReferenceError: c i

var、let、const区别

在javascript中有三种声明变量的方式:var.let.const. var 声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用. for(var i=0;i<=1000;i++){ var sum=0; sum+=i; } alert(sum); 声明在for循环内部的sum,跳出for循环一样可以使用,不会报错正常弹出结果 let:声明块级变量,即局部变量. 在上面的例子中,跳出for循环,再使用sum变量就会报错,有着严格的作用域,变量只作用域当前隶属

JS中的块级作用域,var、let、const三者的区别

1. 块作用域{ } <script type="text/javascript"> { var a = 1; console.log(a); // 1 } console.log(a); // 1 // 可见,通过var定义的变量可以跨块作用域访问到. (function A() { var b = 2; console.log(b); // 2 })(); // console.log(b); // 报错, // 可见,通过var定义的变量不能跨函数作用域访问到 if(

var、let和const的区别

一.前言 在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . const . function . class ,本文主要讨论 var . let 和 const 之间的区别. 二.var 如果使用关键字 var 声明一个变量,那么这个变量就属于当前的函数作用域,如果声明是发生在任何函数外的顶层声明,那么这个变量就属于全局作用域.举例说明: var a = 1;

JS --- var、let、const三者的区别

JS中作用域有:全局作用域.函数作用域.没有块作用域的概念.ECMAScript 6(简称ES6)中新增了块级作用域.块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域.  es5:var      es6:let .const <script type="text/javascript"> // 块作用域 { var a = 1; let b = 2; const c = 3; // c = 4; // 报错,const不能修改 var aa; le

var、let、const

//let是块级作用域,函数内部使用let定义后,对函数外部无影响,例如: { let a = 1; var b = 2; } console.log(b)// 2 console.log(a)//ReferenceError: a is not defined let :{}可以构成作用域,称之为块级作用域 var:只有函数才可以构成作用域 —————— for (let i = 0; i < 3; i++) { let i = 'abc'; console.log(i); }//for循环的

认识 var、let、const

我们通过声明.初始化.值的可变性.作用域.变量提升以及在工作中如何使用等多个方面来详细了解var.let.const等关键字功能与特点. 声明 var,let:可以先声明,后赋值(初始化),默认值是 undefined. const:不能将声明与初始化单独分开,否则报错,没有默认值. var:声明的标识符可以被重复声明多次,多次声明进行的都是覆盖操作, const,let:同一个标识符不能同时声明多次,否则报语法错误. let variable; let variable; //Uncaught

var与let、const的区别

var与let.const 一.var声明的变量会挂载在window上,而let和const声明的变量不会: var a = 100;console.log(a,window.a); // 100 100 let b = 10;console.log(b,window.b); // 10 undefined const c = 1;console.log(c,window.c); // 1 undefined 二.var声明变量存在变量提升,let和const不存在变量提升 console.lo