let与const详解

在ES6中,js首次引入了块级作用域的概念,而什么是块级作用域?

众所就知,在js当中存在预解析的概念,就是变量提升。并且只存在全局作用域和私有作用域。在全局定义的变量就是全局变量,而在函数内部定义的变量称为私有变量。而在if判断和for循环之类的都是全局变量。

而块级作用域,就是在一个作用域中,该变量只能在声明后才能使用,并且该变量只在该作用域有效。

而let给js带来了块级作用域    那么我们就细讲一下let

1 //块级作用域的变量只能在块级作用域有效,否则报错
2 {
3     var a=2;
4     let b=3;
5 }
6 console.log(a); //2
7 console.log(b);//Uncaught ReferenceError: b is not defined
1 //块级作用域变量不能重复声明变量
2 {
3     let a;
4     let a;
5 }
6 //会出现       Identifier ‘a‘ has already been declared
1 //块级作用域只能在声明赋值后才能使用
2 {
3     let a=b;   //b还没有声明赋值
4     let b=10
5 }
6 // Uncaught ReferenceError: b is not defined
1 var arr=[];
2 for(let i=0;i<10;i++){
3     arr[i]=function(){
4         return i
5     };
6 }
7 console.log(arr[3]());   //3   如果用var的话   肯定就是10 啦
1 //在块级作用域中  for分父级作用域与子级作用域
2 for(let i=0;i<10;i++){
3     let i=‘123‘;
4     console.log(i);   //打印10次  123   在同一块级作用域下是不能重复声明的   所以  ()与{}  在不同作用域
5 }

那ok   let就先结束了。

const是用来声明常量的,感觉js越来与后端语言靠近

我们都知道常量的值是不允许改变的,但是我们不能简单的理解内容不能改变,在js中,对象都是引用类型,而const在声明一个对象常量的时候,他存储的是这个对象的地址,只要这个地址不改变,const就不会报错,至于在地址存储的什么东西,那就跟const就没有太大关系了  比如:

1 const obj={
2     name:‘xuwen‘
3 }
4 obj.age=27;
5 console.log(obj);//Object {name: "xuwen", age: 27}

同样,const声明一个变量也给js带来了块级作用域,比如说块级作用域只在作用域里面才有效,比如块级作用域不能重复声明变量 ,比如作用域变量只能在声明后才能使用这些上面都提到过就不重复了。

ok,结束const

那么我们再说一下顶层对象的属性

在ES6之前,顶层对象的属性和全局变量是等价的。

顶层对象在浏览器中指的就是window对象  在node里面就是global对象

1 //我们在全局作用域下   使用一个  a=10   相当于window.a=10

那么我们现在是ES6时代了,当然是有所改变的

我们在用  let   const  class声明变量的时候不再属于顶层对象了

let a=10
window.a   //undefined

至于node当中的global对象    哎,其实我也不是特别的熟悉。顶层对象的不同肯定会导致兼容性的问题的,至于如何解决,以后再说吧。

时间: 2024-08-04 03:51:04

let与const详解的相关文章

c/c++中const详解

c/c++中const详解 来自http://blog.csdn.net/lwbeyond/article/details/6187501 一. cons 的作用 (1) 可以定义 const 常量 const int Max=100; int Array[Max]; (2) 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性 如果在函数体内修改了i,编译器就会报错: void f (const int i) { i=10;//error! } (3) 为函数重载提供了一个参考 class 

【转】C++ 常量类型 const 详解

文章转自:http://www.cnblogs.com/daocaoren/archive/2011/07/14/2106278.html 1.什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.(当然,我们可以偷梁换柱进行更新:) 2.为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点. 3.cons有什么主要的作用?(1)可以定义const常量,具有不可变性. 例如: const in

const 详解

? 简单分类: 常变量        const 类型 变量名  或者   类型 const  变量名 常引用        const 类型& 引用名  或者  类型 const & 引用名 常对象        const 类名     对象名  或者  类名 const     对象名 常数组        const 类型     数组名   或者  类型  const     数组名 常成员函数    类名::fun(形参) const 常指针        const 类型*指

ECMAScript 6中let和const详解

1:Let命令 (1)Let定义块级作用域的变量,var定义的变量会提升.Let不会提升.如下.可以先用是undefined但是let在定义之前是不能用的.会报错Uncaught ReferenceError: letter is not defined(-) console.log(color) console.log(letter) var color = 'red'; let letter = 'a' 只要块级作用域内存在let命令,声明的变量不受外部影响. var tmp = 123;

Bill学C++ 第一季:const 详解

零.文章来由 打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己.整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度. 一.从 文字常量和常变量 开始 1.文字常量 程序中的特殊标识符或表达式,由于同时满足: (1)不可寻址(放在代码区) (2)值不可变 所以可视为文字常量.他们是 静态数组名.枚举变量.全局(静态变量)首地址.#define定义的常量. 整型文字常量: (1)前加0表示 八进制 (2)前加0x表示 十六进制 (3)后加L(推荐)或l,表示long类型 (4)后

c++ const详解

0x01:const常量 1 const int num = 10; 2 int a[num] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 3 cout << sizeof(a) << endl;//sizeof(a) 为 40  C++编译器对const做了优化,引用常量的地方,直接替换常量,不读内存,读取常量符号表 const int num = 10; int *p = const_cast<int *>(&num);*p =

[js高手之路] es6系列教程 - var, let, const详解

function show( flag ){             console.log( a );             if( flag ){                 var a = 'ghostwu';                 return a;             } else {                 console.log( a );                 return null;             }         } 我们从e

c++中const详解

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的. 一.Const作用    如下表所示: No. 作用 说明 参考代码 1 可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行

C++中的const详解

const的用法,特别是用在函数后面 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址. 在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针.既不能改变 this所指向的对象,也不能改变 this所保存的地址.   关键字:Const,Const函数,Const变量,函数后面的Const 看到const关键字,C++程序员首先想到的可能是const常量.这可不是