欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

js中const,var,let区别


js中var、let、const区别

在javascript中有三种声明变量的方式:var、let、const。

var 声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用。

for(var i=0;i<=1000;i++){ 
var sum=0; 
sum+=i; 

alert(sum);

声明在for循环内部的sum,跳出for循环一样可以使用,不会报错正常弹出结果

 

let:声明块级变量,即局部变量。 

在上面的例子中,跳出for循环,再使用sum变量就会报错,有着严格的作用域,变量只作用域当前隶属的代码块,不可重复定义同一个变量,不可在声明之前调用,必须先定义再使用,会报错,循环体中可以用let

注意:必须声明'use strict';后才能使用let声明变量否则浏览并不能显示结果,

 

const:用于声明常量,也具有块级作用域 ,也可声明块级。

const PI=3.14;

它和let一样,也不能重复定义同一个变量,const一旦定义,无法修改

来自  https://www.cnblogs.com/liuna/p/6137279.html


js-ES6学习笔记-const命令

1、const声明一个只读的常量。一旦声明,常量的值就不能改变。

2、const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

3、const的作用域与let命令相同:只在声明所在的块级作用域内有效

4、const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。

5、const声明的常量,也与let一样不可重复声明

6、对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。

7、如果真的想将对象冻结,应该使用Object.freeze方法

8、ES5只有两种声明变量的方法:var命令和function命令。ES6除了添加letconst命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6一共有6种声明变量的方法。

9、顶层对象,在浏览器环境指的是window对象,在Node指的是global对象。ES5之中,顶层对象的属性与全局变量是等价的。

10、ES6中,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩。

来自  https://www.cnblogs.com/zczhangcui/p/6393304.html


js中var、let、const区别

今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章。主要内容是:js中三种定义变量的方式const, var, let的区别。

1.const定义的变量不可以修改,而且必须初始化。

1 const b = 2;//正确
2 // const b;//错误,必须初始化 
3 console.log('函数外const定义b:' + b);//有输出值
4 // b = 5;
5 // console.log('函数外修改const定义b:' + b);//无法输出 
                   

2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。

复制代码                        
1 var a = 1;
2 // var a;//不会报错
3 console.log('函数外var定义a:' + a);//可以输出a=1
4 function change(){
5 a = 4;
6 console.log('函数内var定义a:' + a);//可以输出a=4
7 } 
8 change();
9 console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4
                       
复制代码                        

3.let是块级作用域,函数内部使用let定义后,对函数外部无影响。

复制代码                        
1 let c = 3;
2 console.log('函数外let定义c:' + c);//输出c=3
3 function change(){
4 let c = 6;
5 console.log('函数内let定义c:' + c);//输出c=6
6 } 
7 change();
8 console.log('函数调用后let定义c不受函数内部定义影响:' + c);//输出c=3
                       
复制代码                        

如有错误,请您指正!

分类: JavaScript                    
好文要顶 关注我 收藏该文                          
                               
奔跑的铃铛
关注 - 2
粉丝 - 15                                
+加关注                            
31                            
1                            
» 下一篇:img的hover事件闪动
                   
posted @ 2016-10-10 10:00 奔跑的铃铛 阅读(141007) 评论(15编辑 收藏            


   
  #1楼 2017-02-15 14:49 | 日积YL          
知道了
支持(0)反对(0)            
  #2楼 2017-04-11 14:52 | lilyxs          
请教楼主一个问题: var monitor = void 0;void 0是什么意思呀???谢谢
支持(0)反对(0)            
  #3楼[楼主2017-04-11 16:50 | 奔跑的铃铛          
@ lilyxs
我觉得效果相当于:var monitor;
你可以输出一下monitor,都是undefined。
但是如果要赋值undefined的时候,用void 0;更好,因为undefined在JavaScript中并不属于保留字,在一些浏览器(ie低版本)中可能会返回number而不是undefined。
支持(5)反对(0)            
  #4楼 2017-05-08 16:50 | 醉里挑灯看键          
@ lilyxs
感觉是一种显式、置空、初始化。比起自动的空或者null,显式声明了心里更有底。像C#/Java的string.Empty();在没有这类专用函数的语言中会用 var mo= “” 或者var mo = null;
不知道说的对不对。@奔跑的铃铛            
支持(1)反对(0)            
  #5楼 2017-09-07 22:08 | Allen_D          
学习了
支持(0)反对(0)            
  #6楼 2017-09-11 17:13 | Marydon          
对于博主关于var的解释,我认为需要更正一下,
var即可用于函数外,亦可用于函数内,这就涉及到全局变量与局部变量的问题,
全局变量如何声明:
在函数外声明的变量就是全局变量,反之,在函数内声明的变量就是局部变量,
作用域:
全局变量无论在函数内,还是函数外,都可访问到;
局部变量只能在函数内有效,函数外部访问不到该变量及说对应的变量值
var声明的变量在两种情况下,是全变量:
1.直接在函数外部声明:var aa=1;
2.在函数内部不声明关键字 aa=2,即博主change()方法里的变量重新赋值

测试:
可以再博主提供的函数change()方法里再太添加 var bb=33;
在该函数外面,console.log(bb);会得到undefined
,
更多介绍,见文章js声明变量的三种方式
http://www.cnblogs.com/Marydon20170307/p/7505964.html            
支持(2)反对(0)            
  #7楼[楼主2017-09-11 19:32 | 奔跑的铃铛          
@ Marydon
你说的全局变量和局部变量的定义和用法是对的,但是我不太同意“使用var完全可以取代let 声明变量”,有些闭包循环的问题,使用let会比使用var更加方便,两者各有优势,但是不能替代。
支持(0)反对(0)            
  #8楼 2017-09-13 16:18 | Marydon          
@ 奔跑的铃铛
是的,我以偏概全了,昨天意识到这个问题了,我把评论中的那句话删了,以免误导他人,关于你说的使用let实现闭包循环能举个例子吗,关于let的用法还是不太清楚,在这之前我从没用过let和const,谢谢博主!!!
支持(1)反对(0)            
  #9楼 2017-11-09 00:15 | 趁你还年轻          
这句不够严谨:const定义的变量不可以修改 
应该是基本数据类型变量。
  const arr = [1,2,3] ;
  arr[3]= "hello";
  arr.push("world")
  //arr = [1,2,"hello","world"]
支持(6)反对(0)            
  #10楼[楼主2017-11-29 19:42 | 奔跑的铃铛          
@ 趁你还年轻
你说的对~
支持(0)反对(0)            
  #11楼 2018-02-08 11:59 | 他她          
为什么我觉得var和let没有区别呢
let:
let a2 = 1;
// var a;//不会报错
console.log('函数外let定义a2:' + a2);//可以输出a2=1
function change(){
a2 = 4;
console.log('函数内let定义a2:' + a2);//可以输出a2=4

change();
console.log('函数调用后let定义a2为函数内部修改值:' + a2);//可以输出a2=4

var :
var a2 = 1;
// var a;//不会报错
console.log('函数外var 定义a2:' + a2);//可以输出a2=1
function change(){
a2 = 4;
console.log('函数内var 定义a2:' + a2);//可以输出a2=4

change();
console.log('函数调用后var 定义a2为函数内部修改值:' + a2);//可以输出a2=4
这两者输出的结果是一样的啊
支持(0)反对(0)            
  #12楼 2018-05-15 01:46 | 程序猿--少停          
不应该是 const常量 let 局部变量 var 全局变量么?
支持(1)反对(0)            
  #13楼 2018-05-25 17:36 | 蜡笔-吾小新          
@ lilyxs
相当于undefined
支持(0)反对(0)            
  #14楼 2018-07-06 17:43 | 正能量+1          
1
2
3
4
5
console.log(a);  //undefined                                                
var a = 8;                                                
 
console.log(a);  //报错:a is not defined                                                
let a = 8;                                                


这样才能让let和var有区别,博主的代码let和var结果都一样
支持(0)反对(0)            
  #15楼 2018-12-21 15:55 | zcxxx          
关于let的用法我觉得是这样的:
let声明的变量范围只在一个代码块中。
如:

               
1
2
3
4
5
6
7
8
function demo(){                                                
  for(var i = 0; i < 10; i++){                                                
    let c = 10;                                                
    console.log(c);//这里会打印出十个10;                                                
  }                                                
  console.log(c);//这里打印出的内容为 "c is not defined";                                                
  //说明声明的c变量只在for循环这一代码块中能够访问,其他地方都访问不到;                                                
}                                                
支持(0)反对(0)            

来自  https://www.cnblogs.com/ksl666/p/5944718.html

普通分类: