JS变量

var 描述
var、let、const 区别?
变量声明,无论发生在何处,都在执行任何代码之前进行处理。
用 var 声明的变量的作用域是它当前的执行上下文,它可以是嵌套的函数,或者对于声明在任何函数外的变量来说是全局。

var a ;      //声明在任何函数外的变量
function inner(){
	 a='改变了a的值'
}
inner()   
console.log(a)    //改变了a的值

当赋值给未声明的变量, 则执行赋值后, 该变量会被隐式地创建为全局变量(它将成为全局对象的属性)。

声明和未声明变量之间的差异是:
  1. 声明变量的作用域限制在其声明位置的上下文中,而非声明变量总是全局的。
function inner(){
	 a ="内部a";
	 var b = "内部b" ;     //将会报错
}
inner()   
console.log(a)    //内部a
console.log(b)    //Uncaught ReferenceError: b is not defined
  1. 声明变量在任何代码执行前创建,而非声明变量只有在执行赋值操作的时候才会被创建。
console.log(a);                // Uncaught ReferenceError: a is not defined
console.log('still going...'); // 后面就不执行了
var a;
console.log(a);                // 打印"undefined"
console.log('still going...'); // 后面接着执行打印"still going..."
  1. 声明变量是它所在上下文环境的不可配置属性,非声明变量是可配置的(如非声明变量可以被删除)
var a = 1;
b = 2;

delete this.a; 
delete this.b;

console.log(a);		//打印'1'
console.log(b);		//Uncaught ReferenceError: b is not defined
变量提升

由于变量声明(以及其他声明)总是在任意代码执行之前处理的,所以在代码中的任意位置声明变量总是等效于在代码开头声明。这意味着变量可以在声明之前使用,这个行为叫做“hoisting”。“hoisting”就像是把所有的变量声明移动到函数或者全局代码的开头位置。
在这里插入图片描述

bla = 2
var bla;

// 可以隐式地(implicitly)将以上代码理解为:

var bla;
bla = 2;
给两个变量赋值成字符串值
var x = y, y = 'A';
console.log(x + y); // undefinedA

x和y已经隐式地创建为全局变量,默认为undefined,之后又将A赋值给 y

var  y = 'A' , x = y ;
console.log(x + y); // AA

可以看到,使用var给两个变量赋值是从左到右依次赋值的

var、let、const 区别?

var 方式定义变量有啥 bug ?
  1. Js没有块级作用域
for(var i=0;i<10;i++){
      var a = 'a';
}

console.log(i,a);   //10  "a"

明明已经跳出 for 循环了,却还可以访问到 for 循环内定义的变量 a ,甚至连 i 都可以被放访问到
2. 循环内变量过度共享

for (var i = 0; i < 3; i++) {
      setTimeout(function () {
        console.log(i)
      }, 1000);
 }

控制台输出了3个3,而不是预想的 0、1、2
循环本身及三次 timeout 回调均共享唯一的变量 i。当循环结束执行时,i 的值为3。所以当第一个 timeout 执行时,输出的 i 的值也为 3 了

把上述的两个例子中的 var 替代成 let 再运行一次。第一个例子ia的值就访问不到了,而第二个例子也能依次输出0、1、2了

而const 就是用来定义常量的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值