• 技术文章 >web前端 >js教程

    一道关于JavaScript变量作用域的面试题_javascript技巧

    2016-05-16 15:11:29原创1045
    小编觉得这道题对理解JavaScript 作用域还是很有帮助的,特此又把自己的解题思路梳理了一遍,希望对其它人有所帮助。

    首先看下面试题:

    var arr = [1, 2, 3];
      for (var i = 0, j; j = arr[i++];) {
        console.log(j);
      }
    
      console.log('---------');
      console.log(i);
      console.log('---------');
      console.log(j);
      console.log('---------');
    
    

    在解题前,我们先回顾下 JavaScript 中,变量域相关的知识。

    全局变量(Global)
    全局变量是指在任何地方都可以访问的变量,有两种情况

    在 function 外面声明,不论是否用 var 关键字
    在 function 里面声明,不使用 var 关键字,当然声明的语句必须被执行才可以
    局部变量(Local )
    局部变量只能在被声明的 function 内部才能访问
    在 function 里面声明,使用 var 关键字
    两点要注意的地方

    先看代码:

    alert(i); // 输出 undefined
     
     for (var i = 0; i < 1; i++){};
     
     alert(i); // 输出1
    

    JavaScript 不存在语句作用域,在语句内定义的变量会扩散到语句外边, 例子中 i 在 for 语句中声明,但是在 for 语句的外面任然可以访问
    在 for 语句之前就可以访问到 i ,只不过这时候还没有被赋值
    开始我们的解题

    i++ 是在 i 使用后再自加:

    第一次执行时,j=arr[0],之后 i=1,console.log(j) 输出 1

    第二次执行时,j=arr[1],之后 i=2,ocnsole.log(j) 输出 2

    第三次执行时,j=arr[2],之后 i=3,ocnsole.log(j) 输出 3

    第四次(不符合 for 条件),j=arr[3] 为 undefined,之后 i=4,ocnsole.log(j) 没有输出,退出 for 循环

    for 语句执行结束后,console.log(i) 由上分析可知输出 4,console.log(j) 输出 undefined

    最后输出结果为:

    2
    ---------
    ---------
    undefined
    ---------
    

    针对上面的分析和结果,想必大家都已经搞清楚了吧,然后我们开始举一反三吧。

    借题改题一
    题目:
    var arr = [1, 2, 3];

      for (var i = 0, j; j = arr[++i];) {
        console.log(j);
      }
    
      console.log('---------');
      console.log(i);
      console.log('---------');
      console.log(j);
      console.log('---------');
    
    

    答案:

    2
    3
    ---------
    3
    ---------
    undefined
    ---------
    

    借题改题二
    题目:

    function xxx() {
        var arr = [1, 2, 3];
        for (var i = 0, j; j = arr[i++];) {
          console.log(j);
        }
      }
      xxx();
    
      console.log('---------');
      console.log(i);
      console.log('---------');
      console.log(j);
      console.log('---------');
    
    

    答案:

    1
    2
    3
    ---------
    报错:Uncaught ReferenceError: i is not defined
    

    为大家就分享到这,希望对大家理解JavaScript作用域有所帮助。

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:javascript html5移动端轻松实现文件上传_javascript技巧 下一篇:三种Node.js写文件的方式_node.js
    大前端线上培训班

    相关文章推荐

    • 手把手教你使用工具切换 node 版本• javascript如何获取当前方法名• javascript怎么检测变量是否存在• JavaScript如何获取HTML元素• JavaScript中数组如何遍历

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网