zoukankan      html  css  js  c++  java
  • JavaScript经典作用域问题(转载)

    1、题目

    var a = 10;
    function test(){
        a = 100;
        console.log(a);
        console.log(this.a);
        var a;
        console.log(a);
    }
    test();

    答案:100,10,100
    解析:Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定变量的作用域,所以在函数test执行前,由于第6行声明了局部变量a,所以函数内部的a都指向已经声明的局部变量,所以第4行输出100。第5行输出this.a,我们都知道,函数内部的this指针指向的是函数的调用者,在这里函数test被全局对象调用,所以this指针指向全局对象(这里即window),所以this.a = window.a,一开始生命了全局变量a=10,所以第5行输出结果为10。第7行输出结果为100,因为局部变量a在第3行已经被赋值了100,所以直接输出局部变量a的值。

    2、题目

    var a = 100;
    function test(){
        console.log(a);
        var a = 10;
        console.log(a);
    }
    test();

    3、题目

    var a = 100;
    function test(){
        console.log(a);
        a = 10;
        console.log(a);
    }
    test();
    console.log(a);

    答案:100 10 10
    解析:我们知道在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量,在test函数内,a=10声明了一个全局变量,所以第3行的a应该输出全局变量的值,而在函数执行之前已经声明过一个全局变量并赋值100,所以这里第上输出100。第4行给全局变量a 重新赋值10,所以全局变量a的值变成10,所以第5行输出10。而在函数test外部,第8行输出全局变量a的值,因为全局变量被重新赋值为10,所以输出结果即为10。

    如需转载,请注明出处:https://www.cnblogs.com/zhuchenglin/p/9568365.html

  • 相关阅读:
    http和HTTPS的区别及SSL介绍
    cas系列(三)--HTTP和HTTPS、SSL
    cas系列(一)--cas单点登录基本原理
    修改cas登陆页面-服务器端
    rest例子
    RESTful 架构风格概述
    Java分布式应用技术架构介绍
    tomcat的server.xml详解
    Apache Shiro 快速入门教程,shiro 基础教程 (这篇文章非常好)
    fmt:formatDate标签的输出格式
  • 原文地址:https://www.cnblogs.com/gopark/p/9922398.html
Copyright © 2011-2022 走看看