ts和js中let和var定义变量的区别
javascript 严格模式
第一次接触let关键字,有一个要非常非常要注意的概念就是”JavaScript 严格模式”,比如下述的代码运行就会报错:
- let hello = 'hello world.';
- console.log(hello);
错误信息如下:
- let hello = 'hello world.';
- ^^^
- SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
- ...
解决方法就是,在文件头添加”javascript 严格模式”声明:
- 'use strict';
- let hello = 'hello world.';
- console.log(hello);
更多更详细的关于”javascript 严格模式”说明,请参考阮一峰的博客
《Javascript 严格模式详解》
let和var关键字的异同
声明后未赋值,表现相同
- 'use strict';
- (function() {
- var varTest;
- let letTest;
- console.log(varTest); //输出undefined
- console.log(letTest); //输出undefined
- }());
使用未声明的变量,表现不同:
- (function() {
- console.log(varTest); //输出undefined(注意要注释掉下面一行才能运行)
- console.log(letTest); //直接报错:ReferenceError: letTest is not defined
- var varTest = 'test var OK.';
- let letTest = 'test let OK.';
- }());
重复声明同一个变量时,表现不同:
- 'use strict';
- (function() {
- var varTest = 'test var OK.';
- let letTest = 'test let OK.';
- var varTest = 'varTest changed.';
- let letTest = 'letTest changed.'; //直接报错:SyntaxError: Identifier 'letTest' has already been declared
- console.log(varTest); //输出varTest changed.(注意要注释掉上面letTest变量的重复声明才能运行)
- console.log(letTest);
- }());
变量作用范围,表现不同
- 'use strict';
- (function() {
- var varTest = 'test var OK.';
- let letTest = 'test let OK.';
- {
- var varTest = 'varTest changed.';
- let letTest = 'letTest changed.';
- }
- console.log(varTest); //输出"varTest changed.",内部"{}"中声明的varTest变量覆盖外部的letTest声明
- console.log(letTest); //输出"test let OK.",内部"{}"中声明的letTest和外部的letTest不是同一个变量
- }());
Egret下:
使用未定义的let:
- class Test {
- public name:string = "Test";
- public run(){
- console.log(a); //该行报错 Block-scoped variable 'a' used before its declaration.
- console.log(b);
- let a;
- var b;
- }
- }
重复定义let:
- class Test {
- public name:string = "Test";
- public run(){
- let a; //该行报错 Cannot redeclare block-scoped variable 'a'.
- var b;
- let a;
- var b; //该行报错 Cannot redeclare block-scoped variable 'a'.
- }
- }
变量范围:
- class Test {
- public name:string = "Test";
- public run(){
- let a = ;
- ;
- {
- let a = ;
- ;
- }
- console.log(a);
- console.log(b);
- }
- }
ts和js中let和var定义变量的区别的更多相关文章
- js中let和var定义变量的区别
let变量之前没见过,刚遇到,探探究竟. 以下转自:http://blog.csdn.net/nfer_zhuang/article/details/48781671 声明后未赋值,表现相同 (fun ...
- es6的let与es5的var定义变量的区别
es6的let与es5的var定义变量的区别 自身新手第一次接触let关键字的时候,不知道let与var的区别,本能认为是一样,但非如此,比如下述的代码运行就会报错: let hello = 'hel ...
- JS中const、var 和let的区别
今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...
- 【转载】浅谈JavaScript,let和var定义变量的区别
了解JS与ES5与ES6区别 JS语言 JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能. 动态: 在运行时确定数据类型.变量使用之前不需要类型声明, ...
- mysql -- 存储过程中 declare 和 set 定义变量的区别
mysql存储过程中,定义变量有两种方式:1.使用set或select直接赋值,变量名以 @ 开头.例如:set @var=1;可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量. 2.以 ...
- let 和 var 定义变量的区别
一.变量提升 var 存在变量提升,而 let 不存在变量提升,所以用 let 定义的变量一定要在声明后再使用,否则会报错. var //var定义的变量存在变量提升,变量会把声明提升到整个作用域的最 ...
- MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...
- let和var定义变量的区别
使用 let 语句声明一个变量,该变量的范围限于声明它的块中. 可以在声明变量时为变量赋值,也可以稍后在脚本中给变量赋值. 使用 let 声明的变量,在声明前无法使用,否则将会导致错误. 如果未在 ...
- JS中let、var、const的区别
先看let和var: 1. console.log(a); // undefined var a = 3; console.log(a); // Uncaught ReferenceError: Ca ...
随机推荐
- Java-DBCP连接池
创建项目: 导入jar包: 参见上图. JDBCConn.java获取数据源类: package com.gordon.jdbcconn; import java.io.InputStream; im ...
- Applet Mode
https://github.com/threerings/getdown/wiki/Applet-Mode ————————————————————————————————————————————— ...
- npm常用命令汇总
npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准. 有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装的包. 1.npm install ...
- 修改ES分片规则
转自:http://my.oschina.net/crxy/blog/422287?p=1 Es查询的时候默认是随机从一些分片中查询数据,可以通过配置让es从某些分片中查询数据 1:_local 指查 ...
- HGNC 数据库-人类基因组数据库
HGNC 全称为HUGO Gene Nomenclature Committee, 叫做 HUGO基因命名委员会,负责对人类基因组上包括蛋白编码基因, ncRNA基因,甲基因和其他基因在内的所有基因提 ...
- js unicode处理
//岗位详细界面 var str="1.\u000D\u21B52.\u000D\u21B53"; var pad = function() { var tbl = []; ret ...
- Java 基本概念:jvm、jdk、jre、jse
jvm 是java虚拟机,将java的class字节码文件翻译成二进制可执行程序.jdk 是java的开发包 Javasdk, java的开发工具,包含SUN公司提供的javaAPI,将java源码编 ...
- shiro缓存
shiro的可以权限控制内容包括:URL地址.Web页面的元素.以及方法,即shiro对用户权限的控制是细粒度的.从用户的一次访问来说,他可能需要最多经过三种.多次的验证.这里的多次怎么说呢?如果说W ...
- 网站性能测试PV到TPS的转换以及TPS的波动和淘宝性能测试要点
<淘宝性能测试白皮书V0.3> 性能测试的难点不在于测,在于测出的数据和实际的对照关系,以及测试出来的数据对性能的评估(到底是好,还是不好). 淘宝性能测试白皮书,解决了我的4个问题:1. ...
- svn merge和branch分析
[转载] 使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的 ...