let与const详解
在ES6中,js首次引入了块级作用域的概念,而什么是块级作用域?
众所就知,在js当中存在预解析的概念,就是变量提升。并且只存在全局作用域和私有作用域。在全局定义的变量就是全局变量,而在函数内部定义的变量称为私有变量。而在if判断和for循环之类的都是全局变量。
而块级作用域,就是在一个作用域中,该变量只能在声明后才能使用,并且该变量只在该作用域有效。
而let给js带来了块级作用域 那么我们就细讲一下let
//块级作用域的变量只能在块级作用域有效,否则报错
{
var a=2;
let b=3;
}
console.log(a); //
console.log(b);//Uncaught ReferenceError: b is not defined
//块级作用域变量不能重复声明变量
{
let a;
let a;
}
//会出现 Identifier 'a' has already been declared
//块级作用域只能在声明赋值后才能使用
{
let a=b; //b还没有声明赋值
let b=10
}
// Uncaught ReferenceError: b is not defined
var arr=[];
for(let i=0;i<10;i++){
arr[i]=function(){
return i
};
}
console.log(arr[3]()); //3 如果用var的话 肯定就是10 啦
//在块级作用域中 for分父级作用域与子级作用域
for(let i=0;i<10;i++){
let i='123';
console.log(i); //打印10次 123 在同一块级作用域下是不能重复声明的 所以 ()与{} 在不同作用域
}
那ok let就先结束了。
const是用来声明常量的,感觉js越来与后端语言靠近
我们都知道常量的值是不允许改变的,但是我们不能简单的理解内容不能改变,在js中,对象都是引用类型,而const在声明一个对象常量的时候,他存储的是这个对象的地址,只要这个地址不改变,const就不会报错,至于在地址存储的什么东西,那就跟const就没有太大关系了 比如:
const obj={
name:'xuwen'
}
obj.age=27;
console.log(obj);//Object {name: "xuwen", age: 27}
同样,const声明一个变量也给js带来了块级作用域,比如说块级作用域只在作用域里面才有效,比如块级作用域不能重复声明变量 ,比如作用域变量只能在声明后才能使用这些上面都提到过就不重复了。
ok,结束const
那么我们再说一下顶层对象的属性
在ES6之前,顶层对象的属性和全局变量是等价的。
顶层对象在浏览器中指的就是window对象 在node里面就是global对象
//我们在全局作用域下 使用一个 a=10 相当于window.a=10
那么我们现在是ES6时代了,当然是有所改变的
我们在用 let const class声明变量的时候不再属于顶层对象了
let a=10
window.a //undefined
至于node当中的global对象 哎,其实我也不是特别的熟悉。顶层对象的不同肯定会导致兼容性的问题的,至于如何解决,以后再说吧。
let与const详解的更多相关文章
- const详解
详解C++中的const关键字
- C++中的指针(*)、引用(&)、const详解(一、定义变量)
一.前言 本人作为一个工作了5年的程序员,程序生涯最初是从c/c++开始的,但是始终不能很熟悉的理解c语言中的指针和c++中的引用,归其原因,一部分自己没有静下心来思考,一部分原因是其自身的复杂性. ...
- C++中的const详解
const的用法,特别是用在函数后面 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址. 在 const ...
- C++ 中的 const 详解
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4235721.html 1.为什么使用 const int 而不使用 #define 在使用# ...
- C++ 常量类型 const 详解
1.什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.(当然,我们可以偷梁换柱进行更新:) 2.为什么引入const? const 推出的初始目的 ...
- [js高手之路] es6系列教程 - var, let, const详解
function show( flag ){ console.log( a ); if( flag ){ var a = 'ghostwu'; return a; } else { console.l ...
- ES6 let和const详解及使用细节
ES6之前javascript只有全局作用域和函数作用域,所以经常会遇到变量提升了或者使用闭包的时候出错的问题. 所有a[i]都会输出10: var arr=[]; for (var i=0;i< ...
- ES6中let和const详解
let和var一样也是用来定义变量,不同之处在于let是块级作用域,只在所定义的块级作用域中生效,一个花括号便是一个块级作用域 {var a="我是var定义的";let b=&q ...
- 函数新特性、内联函数、const详解
一.函数回顾与后置返回类型 函数定义中,形参如果在函数体内用不到的话,则可以不给形参变量名字,只给其类型. 函数声明时,可以只有形参类型,没有形参名 把函数返回类型放到函数名字之前,这种写法,叫前置返 ...
随机推荐
- nginx 配置禁用ip地址访问
做过面向公网WEB运维的苦逼们肯定见识过各种恶意扫描.拉取.注入等图谋不轨行为吧?对于直接对外的WEB服务器,我们可以直接通过 iptables . Nginx 的deny指令或者是程序来ban掉这些 ...
- 给 Java 学习者的超全教程整理
Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...
- JavascriptS中的各结构的嵌套和函数
各位朋友大家好,上周更新给大家分享了JavaScript的入门知识及各种常用结构的用法,那么,本次更新博主就跟大家更深入的聊一聊JS各结构的嵌套用法,及JS中及其常用的一种结构--函数.以下为函数和循 ...
- 插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数
首先我们先介绍一下普通的插排,就是我们现在一般写的那种,效率是O(n^2)的. 普通的插排基于的思想就是找位置,然后插入进去,其他在它后面的元素全部后移,下面是普通插排的代码: #include< ...
- Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)
这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员--杉本由美,^_^好漂亮啊,赶紧 ...
- Java 判断回文字符串有多少和其中的最大字符串
一.简介代码功能 该代码的功能可以实现对任意的一段字符串进行判断是否有回文,回文有哪些,和其中的最大回文. 二.代码部分 1.全局变量 static String hws = "" ...
- 使用Dockerfile制作自己的Docker镜像
一.背景 一直以来的开发流程都是先从Docker Hub中获取到基础镜像,之后在这个镜像的基础上做开发,以满足一定的需求或者提供某种服务,并由此产生新的镜像,然后就可以push到Docker Hub中 ...
- webpack 打包成功,但是css不起作用
问题: webpack 打包成功,但是css不起作用 问题分析/解决: 原因有以下几种 使用了webpack2的语法规则不正确; webpack2要求必须写-loader; 可能是只写了css-loa ...
- C++ 中关于optional 使用过程中遇到的问题
头文件:#include <boost/optional.hpp> using namespace boost; optional很像一个仅能存放一个元素的容器,它实现了"未初始 ...
- Json对象和Json字符串之间的转换
json字符串转json对象,调用parse方法: var b='{"name":"2323","sex":"afasdf&quo ...