let var和const
来源:互联网 发布:网络黑客头像 编辑:程序博客网 时间:2024/05/16 00:51
{
var b = 1;
let a = 10;
}
console.log('b ==',b);
console.log('a ==',a);
/*
es6新增了let命令,但是let所声明的变量只在let命令所在的代码块有效,比如上个代码,
打印的是b==1 下一个打印直接报错,a is not defined
所以for循环很适合let
for(let i = 0; i < 10; i++) {}
但是for循环如果用var,会有意外发生,
我们看test2方法
*/
}
_test2(){
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function(){
console.log(i);
}
}
a[6]();
//打印是10
var b = [];
for (let i = 0; i < 10; i++) {
a[i] = function(){
console.log(i);
}
}
console.log('b ==',b);
//打印是6
/*
说明var声明的,在全局范围内都有效。
而let声明的变量只能在块级的作用域内才有效
*/
}
_test3(){
console.log('c ==',c);
var c = 10;
console.log('d ==',d);
let d = 5;
typeof y;
var y = 10;
typeof x;
let x = 10;
/*
在react native中 我理解的都存在变量提升。
两者打印的都是 c == undefined d == undefined。而且在typeof命令下不会报错。下面没有用到
但是在google浏览器的开发者工具上 c == undefined,d就直接报错 ReferenceError。
typeof x; let x = 10; 直接ReferenceError
typeof y; var y = 10; 算是打印吧,会出现 number
所以,我们在rn中,变量一定要在声明后使用
*/
}
_test4(){
var tmp = '123';
if (true) {
tmp = 'abs';
console.log('tmp ==',tmp);
let tmp;
console.log('tmp ==',tmp);
}
console.log('tmp ==',tmp);
/*
在react native中 打印顺序是 abs undefined 123
但在google浏览器的开发者工具上 直接报错ReferenceError: tmp is not defined
es6规定,如果在区块中存在let 和 const 命令,这个区块对这些命令声明的变量从一开始就形成封闭作用域
所以,在let命令声明变量之前,该变量都是不可用的。称为‘暂时性死区’
*/
}
_test5(){
//es6不允许在相同的作用域内重复声明同一个变量
function a() {
let a = 10;
// var a = 1;
}
//会直接报错
//react native上报错是 duplicate declaration 'a',重复声明a
//google浏览器的开发者工具上 报错是SyntaxError: Identifier 'a' has already been declared
function b(c){
// let c = 10;
}
//直接报错 同上,所以 在函数内部,声明的变量不能和参数名一样
function aaa(vv) {
{
let vv = 100;
}
}
//上面这个不报错,不在同一个块级作用域内
}
_test6(){
let n = 5;
if (true) {
let n = 10;
}
console.log('n ==',n);
/*
let 为js新增了块级作用域
在rn上,log出来的是5
在浏览器上 报错 SyntaxError: Identifier 'n' has already been declared
*/
}
_test7(){
// const i;
const foo = {};
foo.name = 'fantasy';
console.log('foo.name ==',foo.name);
foo = {};
/*
const是用来声明常量的,一旦声明,它的值就不能改变。也就意味着对于const来说,只声明不赋值也会报错。
比如上面的const i;
同let一样,存在暂时性死区,只能在声明后使用,而且不可重复声明。
对于复合型的变量,变量名不指向数据,而是指向数据所在的地址。比如以下
const foo = {};
foo.name = 'fantasy';
console.log('foo.name ==',foo.name); //打印的是fantasy
但是 foo = {}; 会报错 ‘foo’ is read-only
在rn中经常会有跨模块的常量,可以这么用,
在config.js文件中
export const A = 1;
export const name = 'fantasy';
export const b = [1,2,3];
在test1.js中想用config.js的常量,可以这么写
import * as config from './config'
console.log('config.A ==',config.A); // 1
console.log('config.B ==',config.B); // [1,2,3]
console.log('config.name ==',config.name); // fantasy
在test2.js中想用config.js的常量,可以这么写
import {A,B,name} from './config'
console.log('A ==',A); // 1
console.log('B ==',B); // [1,2,3]
console.log('name ==',name); // fantasy
*/
}
我学es6的github地址是 https://github.com/wkffantasy/LearnES6 欢迎一起学习交流。有不足和错误的地方请求指出,非常感谢
- var let 和const
- let var和const
- javascript中的var,let和const
- var、let和const的区别?
- var let 和const的区别
- var和let,var和const的区别
- var、let、const小解
- let var const 区别
- 【ES6】var / let / const
- Var、const、let区别
- var、let、const 区别?
- let var const
- let const var 区别
- var、let、const
- var,const,let区分
- var、let、const 区别?
- js中var、let和const的区别
- JavaScript中const、var和let区别浅析
- 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
- android studio学习
- Linux学习(十四):修改环境变量
- [agc012c]Tautonym Puzzle
- Spring基于注解的知识点1
- let var和const
- 排序算法(1):总述
- 674. Longest Continuous Increasing Subsequence(Java)
- 实验一 线性表的基本操作实现及其应用
- 关于web上文章移植伴随的样式问题
- Day03 接口 多态
- 详解数组--sort()方法原理下
- 如何通过postman生成接口测试脚本
- mybatis+springmvc时间格式化,jsp实现或者在ResponseBody日期类型Json处理