以前的var方式声明不好用

a=1回声明一个全局变量,

输出了1 说明a=1确实声明了一个全局变量。

但是你把放在其他的地方,就不是声明全局变量了。

如果外面有个全局变量a 那么函数里面就是给a赋值


有两层函数的时候,直接使用的是局部变量a,也就是fn函数里面的a

如果当前没有a就声明一个全局变量a。如果有a就利用这个a。下面当前就是有a的

这样用的就是最外面的var a

如果外面也没有,这时候才会去声明一个全局变量

所以a=1会声明一个全局变量是错的,只有在没有a这个变量的情况下才会隐式的去声明一个全局变量

所以a=1就是含义不明

不建议使用

这样打印出来一个a是对的


没有声明的情况下输出a页面会报错。没有a任何的定义就去使用它

没有报错


不执行的代码影响了,执行的代码
var a会自动提升到上面去,虽然它不会执行,它会给代码一些不符合逻辑的地方,var a 会乱提升

第二个问题

不使用全局变量,全局变量会经常有问题,比如声明了一个全局变量,别人用了我不知道。
用一个函数包起来。  这样var a就是一个局部变量。

函数给他一个名字,不管叫啥名,都是全局变量。 当前x是全局变量,frank是全局变量


把var a放在函数里面 那么a就是一个局部变量。

把a包含在函数x里面。那么函数x就是一个全部变量了。 

匿名函数直接调用,在函数的最后面加个括号。但是语法错误。

避免这个语法错误。那么总的都包含在一个括号里面

声明一个函数,然后马上调用它,就是只是为了这个函数没有名字而已。然后包含在括号里面,是为了不让它报语法错误。搞这么多事情就是为了不暴露全局变量

let的特点,不会往外跑,只要看到了花括号就不会再网上升了。let就是你写在哪就是哪 不会乱跑。

如果这时候在打印a  就会报错,提示未定义。

把a隐藏起来不作为全局变量,在Es6之前 ,js必须使用一个立即执行函数的变态方案,新人完全看不懂
let就是为了方便的使用局部变量,而不需要引用一个函数。

let的作用域只管到花括号


用var 就不会报错。

let的第二个特点 也是可以嵌套的

这个语法叫做块,把一堆代码扩起来。




在一个新的块里面,还没生命a 就用a

既不会用外面的a 也不会用里面的a。直接就报错了。这是一个很好的习惯,这样就不会出现一些奇异的代码

let的第二个特点,如果你在一个block里面。没有用let生命变量就是用这边量。直接就会报错。 
这个特点叫做Temp Dead Zone 临时死区

下面选中的这部分就是临时死区,在这里面,a是不能使用的,一旦使用就报语法错误。

换句话说就是不生命就调用, 就会直接报错

const

a的作用域只在选中那个括号里面。


const只有一次赋值机会,后面再赋值就报错

再次let a 也会报错,一个变量不能声明两次,这里直接报错。

js终于知道在写代码的时候 就告诉你 这里有错。

const的情况。const是常量的意思。只能赋值一次

总结


定义const a不赋值,没运行直接就报错

ES6深入浅出-1 新版变量声明:let 和 const-2.视频 let和const的更多相关文章

  1. ES6深入浅出-1 新版变量声明:let 和 const-3.视频 相关面试题

    执行顺序问题 请问console.log输出的值是多少 输出的肯定是1 假如这里有一行未知的代码 会打印出几? 如果这段未知的代码是a=2.那么其实console输出的就是2 只关心代码,没有关心代码 ...

  2. ES6深入浅出-1 新版变量声明:let 和 const-1.视频 概述

    es7语法比较少,只占了一点点 ES 6 新特性一览:https://frankfang.github.io/es-6-tutorials/ 我用了两个月的时间才理解 let   https://zh ...

  3. es6 快速入门 系列 —— 变量声明:let和const

    其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...

  4. ES6学习笔记之变量声明let,const

    最近用淘宝的weex做了个项目,最近稍微闲下来了.正好很久没有接触RN了,所以趁这个机会系统的学习一下ES6的相关知识. 孔子说:没有对比就没有伤害.所以我们要拿ES6和ES5好好对比的学习.这样才能 ...

  5. ES6 (一)变量声明方法 & 解构赋值

    就是最新的JavaScript 原来的是var,要求不严格,不能限制修改,函数级 es6要求严格 1.防止重复声明 let      变量=var const 常量 2.控制修改 const常量不能修 ...

  6. ES6深入浅出-5 新版对象-2.属性修饰符

    对象语法增强 已经有了个对象的新增语法 还需要一个api来做呢?. 因为有的时候,你需要在旧的对象上添加get.set. 读的时候就走get 写的时候就走set 假设很早之前在项目里写了一个old对象 ...

  7. ES6深入浅出-5 新版对象-1.如何创建对象

    对象属性的加强: 可以通过new Object(), Object.create()方法,或者使用字面量标记(初始化标记)初始化对象. 一个对象初始化器,由花括号/大括号 ({}) 包含的一个由零个或 ...

  8. ES6深入浅出-2 新版函数:箭头函数 2 视频-1.视频 箭头函数

    ES3里面的写法 匿名函数是用不了的 还是需要给他赋值 选中的这一部分叫做匿名函数 等于号叫做赋值 let xxx叫做声明 所以说这个地方是三个语法,首先声明一个匿名函数,然后声明一个xxx变量,最后 ...

  9. ES6深入浅出-7 新版的类(上集)-1.介绍原型

    ES6新出的关键class BE受雇与网景开发了JS 当我们在写一个对象的时候,我们实际上内存的形式表示. obj等于一个空对象,可以直接toString.它为什么可以有toString window ...

随机推荐

  1. 多线程 multiprocessing 的几个小例子

    1.Pipe import multiprocessing as multip,time from multiprocessing import Process,Pipe,Event,Conditio ...

  2. 【转】BSON数据格式

    原文:https://www.e-learn.cn/content/qita/1999197 ----------------------------------------------------- ...

  3. JDK源码那些事儿之常用的ArrayList

    前面已经讲解集合中的HashMap并且也对其中使用的红黑树结构做了对应的说明,这次就来看下简单一些的另一个集合类,也是日常经常使用到的ArrayList,整体来说,算是比较好理解的集合了,一起来看下 ...

  4. css选择器学习(二)属性选择器

    属性选择器 /*******************************************css2中的属性选择器*************************************** ...

  5. nginx中ngx_http_ssl_module模块

    此模块为HTTPS提供必要的⽀支持worker_processes auto;http {...server {listen 443 ssl;keepalive_timeout 70;ssl_prot ...

  6. 详解Python 切片语法

    Python的切片是特别常用的功能,主要用于对列表的元素取值.这篇文章主要介绍了详解Python 切片语法,需要的朋友可以参考下 Python的切片是特别常用的功能,主要用于对列表的元素取值.使用切片 ...

  7. Shell 脚本来自动监控 Linux 系统的内存

    # vim /scripts/swap-warning.sh #!/bin/bash #提取本服务器的IP地址信息 IP=`ifconfig eth0 | grep "inet addr&q ...

  8. 【题解】[Usaco2007 Open]Catch That Cow 抓住那只牛-C++

    题目DescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her ...

  9. 【极大化剪枝】Power Hungry Cows-C++【没有用A*!】【超级简单!】

    Description小KITTY想要快速计算整数P的幂 (1 <= P <=10,000),它们需要你的帮助.因为计算极大数的幂,所以它们同一时间仅能使用2个存储器,每个存储器可记录某个 ...

  10. box-orient

    box-orient 语法: box-orient:horizontal | vertical | inline-axis | block-axis 默认值:horizontal 适用于:伸缩盒容器大 ...