js学习日记-变量的坑

Posted 我是格鲁特

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js学习日记-变量的坑相关的知识,希望对你有一定的参考价值。

js变量细节是前端面试经常遇到的问题,可见其重要程度,要想掌握这个知识点,需注意以下几点:

变量提升

所谓变量提升,就是使用了var关键字申明的变量,会提升到所在作用域的顶部。es5的作用域分为全局作用域和函数作用域,es6(es2015)增加了块级作用域

  function test(){
    console.log(i); //输出undefined而不是报错
    var i=5;
  }

 上面代码实际上等于

  function test(){
    var i;
    console.log(i); //输出undefined而不是报错
    i=5;
  }  

需要注意的是函数表达式中的var也存在变量提升。

不加var的变量

当一个变量没有使用var关键字申明时,执行到该语句时,对应的变量会变成全局变量(不管是不是在函数中声明的),等同于windows.xxx=y;

  function test(){
    i=5;
    console.log(i); 
  }
  try{
    console.log(i);
  }
  catch(e){
    console.log(‘还没有执行到i=5,出错啦‘)
  }
  test();
  //访问函数后,i=5执行,变成全局变量了,因此下一句可以顺利执行
  console.log(‘验证i是否变成了全局变量,i=‘+i);

全局变量名与函数作用域变量名相同时会发生什么?

既然变量存在全局作用域和函数作用域,那个两个作用域中有同名变量也是互不影响的

  var i=5;
  function test(){
    var  i=2;
    console.log(‘我是函数中的i,i=‘+i); //2
  }
  test();
  console.log(‘我是全局中的i,i=‘+i); //5

 访问一个不存在的变量会发生什么?

访问未显示申明或隐式申明的变量时,js引擎直接抛出错误。

以上是关于js学习日记-变量的坑的主要内容,如果未能解决你的问题,请参考以下文章

10.17JS日记

填坑日记uni-app如何调用页面vue以外的js文件变量 - js如何赋值多行文字给变量

Vue.js学习日记——计算属性和侦听器

JS变量定义时连续赋值的坑!

js 面试的坑:变量提升

[JS]应用splice删除多元素时出现的坑