ES6深入浅出-1 新版变量声明:let 和 const-2.视频 let和const
以前的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的更多相关文章
- ES6深入浅出-1 新版变量声明:let 和 const-3.视频 相关面试题
执行顺序问题 请问console.log输出的值是多少 输出的肯定是1 假如这里有一行未知的代码 会打印出几? 如果这段未知的代码是a=2.那么其实console输出的就是2 只关心代码,没有关心代码 ...
- ES6深入浅出-1 新版变量声明:let 和 const-1.视频 概述
es7语法比较少,只占了一点点 ES 6 新特性一览:https://frankfang.github.io/es-6-tutorials/ 我用了两个月的时间才理解 let https://zh ...
- es6 快速入门 系列 —— 变量声明:let和const
其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...
- ES6学习笔记之变量声明let,const
最近用淘宝的weex做了个项目,最近稍微闲下来了.正好很久没有接触RN了,所以趁这个机会系统的学习一下ES6的相关知识. 孔子说:没有对比就没有伤害.所以我们要拿ES6和ES5好好对比的学习.这样才能 ...
- ES6 (一)变量声明方法 & 解构赋值
就是最新的JavaScript 原来的是var,要求不严格,不能限制修改,函数级 es6要求严格 1.防止重复声明 let 变量=var const 常量 2.控制修改 const常量不能修 ...
- ES6深入浅出-5 新版对象-2.属性修饰符
对象语法增强 已经有了个对象的新增语法 还需要一个api来做呢?. 因为有的时候,你需要在旧的对象上添加get.set. 读的时候就走get 写的时候就走set 假设很早之前在项目里写了一个old对象 ...
- ES6深入浅出-5 新版对象-1.如何创建对象
对象属性的加强: 可以通过new Object(), Object.create()方法,或者使用字面量标记(初始化标记)初始化对象. 一个对象初始化器,由花括号/大括号 ({}) 包含的一个由零个或 ...
- ES6深入浅出-2 新版函数:箭头函数 2 视频-1.视频 箭头函数
ES3里面的写法 匿名函数是用不了的 还是需要给他赋值 选中的这一部分叫做匿名函数 等于号叫做赋值 let xxx叫做声明 所以说这个地方是三个语法,首先声明一个匿名函数,然后声明一个xxx变量,最后 ...
- ES6深入浅出-7 新版的类(上集)-1.介绍原型
ES6新出的关键class BE受雇与网景开发了JS 当我们在写一个对象的时候,我们实际上内存的形式表示. obj等于一个空对象,可以直接toString.它为什么可以有toString window ...
随机推荐
- idou老师教你学Istio 29:Envoy启动流程
1. 功能概述 Envoy启动时,会启动一个进程,并在这个进程中启动很多线程,这样,可以启动很多worker线程,一般worker线程数与核心数相同,每个worker线程处理所有已配置的listene ...
- Tcp/IP协议详讲
TCP/IP协议分层详解 目录 TCP/IP 和 ISO/OSI TCP/IP分层模型 数据的封装与分用 其他相关概念 TCP/IP 通信传输流 负责传输的 IP 协议 正文 回到顶部 TCP/IP ...
- MVVM框架(Vue)
问题: 一:说一下使用 JQuery和使用框架的区别? 二: 说一下对 MVVM的理解 三: Vue中如何实现响应式 四: vue中如何解析模板 五:vue整个实现流程 1. 说一下使用 JQuery ...
- Log4net 配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--Log日记 ...
- adb端口被自己占用,或者用adb连不上模拟器最终解决办法
1.下载360手机助手 2.找一个安卓手机连接上电脑,安装驱动 3.手机助手可以连接手机 4.拔掉手机开启模拟器以后都可以用adb连接模拟器了 找到占用端口的程序,禁止其运行 1.首先找到占用5037 ...
- 记一次k8s服务504 timeout
线上服务做集群扩容,调整了节点机器配置,在升级完毕之后,发现某些时候请求较慢,或者直接504 timeout 超时,必现情况,点击几次都是,且并没有代表性. 1.检查istio 日志是否有504 的日 ...
- Codeforces Round #595 (Div. 3) A,B,C,D
A题:n个学生,分成任意组,要求每组中任意两名学生的技能值相差不等于1,问最小分组. #include<bits/stdc++.h> using namespace std; #defin ...
- MySQL GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT column_name, funct ...
- xShell终端中文乱码-解决方法
中文乱码的原因有三种:(1)Linux系统的编码问题(2)xShell终端的编码问题(3)两端的语言编码不一致 linux系统编码 (1) locale:查看系统语言 (2)echo $LANG:查看 ...
- Oracle 物理结构(二) 文件-口令文件
一.口令文件作用 1.口令文件基本介绍 Oracle数据库口令文件存放有超级用户的口令及其他特殊用户的用户名/口令. 口令文件在数据库创建时,自动创建,存放在$ORACLE_HOME/dbs. 此文件 ...