zoukankan      html  css  js  c++  java
  • 基础系列(1)之干掉JavaScript变量作用域

        今天去某顺公司面试,发现一些基础知识都不记得了,于是乎决定把js基础系列的全部梳理一遍,今天就整理下js变量作用域的相关基础知识点,配合最常遇到的笔试题阐述。

    题一:

    1 var g = "a";
    2 function foo(){
    3     alert(g);
    4     var g = "b";
    5     alert(g);
    6 }
    7 foo();

          运行函数foo,如果不了解作用域机制,通常认为会输出a,b,但实际上两次alert的结果分别是undefined,b。

      我们来分析下,第一行声明并定义了全局变量g,第二处出现的g是在函数体内部的局部变量g,如果没有第二处出现的g,第一个g输出的的确是全局的g值‘a’,但基于JavaScript的变量声明提升机制,我们可以改写下代码:

    1 var g = "m";
    2 function test(){
    3     var g;
    4     alert(g);
    5     g = "n";
    6     alert(g);
    7 }
    8 test();

      这样就很明显可以得出第一个alert输出的是函数体内只声明但未定义的局部变量g(值为undefined),第二个alert输出的必然是定义后的g(值为n)。

      我们再进一步测试,去掉函数体内对g的声明标识符‘var’,输出结果又会怎样:

    1 var a = "m";
    2 function test(){
    3     alert(a);
    4     a = "n";
    5     alert(a);
    6 }
    7 test();

       我们会发现现在的输出结果就是当初我想想要的结果了,分别输出'm'、'n'了哈。

  • 相关阅读:
    关于hexo-abbrlink链接undefined
    如何修改layer-layui中的confirm
    cmder的segmentation fault错误修复
    论好的代码习惯的养成/做一个优雅的coder
    50行代码写的一个插件,破解一个H5小游戏
    慎用array_filter函数
    python:if 语句的使用方法
    python:for语句的使用方法
    关于python3 发送邮件
    zookpeer的安装与配置
  • 原文地址:https://www.cnblogs.com/xudengwei/p/6341445.html
Copyright © 2011-2022 走看看