zoukankan      html  css  js  c++  java
  • 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引擎直接抛出错误。

  • 相关阅读:
    实验axios用户登录及token验证
    vue的路由跳转了,可是页面没有变化
    搞清楚cookie,session,token,JWT
    APP应用测试流程
    Scrum敏捷开发
    APP项目环境及发布平台
    ssh -T git@github.com ssh: connect to host github.com port 22: Connection timed out
    pytest与unitest区别
    数据库三大范式--大白话
    docker 安装mysql挂载/var/lib/mysql目录时启动就退出
  • 原文地址:https://www.cnblogs.com/94pm/p/9174829.html
Copyright © 2011-2022 走看看