var a=b=1;和 var a=1,b=1;的区别

引出

今天做题的时候遇到了以下两道题,觉得蛮有意思的。同时也通过这两道题引出var a=b=1;和 var a=1,b=1;的区别,来加深对var a=b=1;和 var a=1,b=1;的理解。

你是不是跃跃欲试了?快来开动脑筋吧~~~

第一道:

console.log(a, b);
 var a = 1, b = 1;
 function fn() {
     console.log(a, b);
     var a = b = 2;
     console.log(a, b);
 }
 fn();
 console.log(a, b);

第一道答案:

 

第二道:

var a=1,b=1;
function fn(){
  console.log(a,b);
  var a=b=2;
  console.log(a,b);
}
fn();
console.log(a,b);

第二道答案:

涉及知识点

变量提升、函数提升、隐式全局变量、var a=b=1;和 var a=1,b=1;的区别、js中变量查找顺序

var a=b=1;等价于   var a=1;b=1;

var a=1,b=1;等价于 var a=1;var b =1;

扫描二维码关注公众号,回复: 17032236 查看本文章

变量提升和函数提升:

变量提升和函数提升是JavaScript中的两个概念,它们描述了在代码执行之前,变量和函数声明会被提升到其所在作用域的顶部的行为。
变量提升是指在变量声明之前就可以访问其变量。JavaScript引擎在代码执行之前会扫描整个作用域,将变量声明提升到作用域的顶部,但是不会提升变量的赋值操作

函数提升类似于变量提升,但是是针对函数声明的。JavaScript引擎在代码执行之前会将函数声明提升到作用域的顶部。

隐式全局变量:

在JavaScript中,如果在声明变量时没有使用`var`、`let`或`const`关键字,那么这个变量就会成为隐式全局变量。隐式全局变量会被绑定到全局对象(在浏览器环境中是`window`对象)上,可以在任何地方被访问和修改。

关于JavaScript中的变量查找方式,它是基于词法作用域的。当访问一个变量时,JavaScript引擎会按照以下步骤进行查找:
1. 在当前作用域查找变量名。
2. 如果找到了变量,则使用它。
3. 如果没有找到变量,则向上一级作用域查找,直到找到该变量或者达到全局作用域(即全局对象)。
4. 如果仍然没有找到变量,则报错该变量未定义。 

详解

第一道:

console.log(a, b);
 var a = 1, b = 1;
 function fn() {
     console.log(a, b);
     var a = b = 2;
     console.log(a, b);
 }
 fn();
 console.log(a, b);

 根据变量提升、函数提升、var a=b=1;和 var a=1,b=1;的区别,以及函数提升的优先级高于变量提升的原则,我们可以得出上述代码的等价代码:

验证写的等价代码与源代码运行结果一致,说明等价代码正确

具体分析如下图

第二道类似就不过多讲解了

总结

1、var a=b=1;等价于   var a=1;b=1;

     var a=1,b=1;等价于 var a=1;var b =1;

2、函数提升优先级高于变量提升

3、变量提升和函数提升只是提升声明

4、隐式全局变量可以在任何地方被访问和修改。

猜你喜欢

转载自blog.csdn.net/weixin_53141315/article/details/132558121