zoukankan      html  css  js  c++  java
  • Javascript中的var变量声明作用域问题

    先看一下这两段代码的执行结果

    var name2 = 'What!';
    function a() {
        if (typeof name2 === 'undefined') {
            console.log('Undefined');
            var name2 = 'Jack';
        } else {
            console.log('Hello ' + name2);
        }
    }
    a();
    

    将if语句中的var声明注释掉

    var name2 = 'What!';
    function a() {
        if (typeof name2 === 'undefined') {
            console.log('Undefined');
            //var name2 = 'Jack';
        } else {
            console.log('Hello ' + name2);
        }
    }
    a();
    

    前一个会输出Undefined, 后一个会输出Hello What!. 说明在if里的var变量声明, 会影响到外部.
    再运行一个代码

    function f1(){
      if (typeof name3 === 'undefined') {
      	console.log("undefined");
      	var name3 = "anything";
      }
      if (typeof name3 !== 'undefined') {
        console.log("defined!");
      }
    }
    f1();
    if (typeof name3 === 'undefined') {
      console.log("undefined outside");
    }
    

    这段代码会输出

    undefined
    defined!
    undefined outside
    

    说明这个影响的范围仅在于函数内部, 不会影响到函数外

    说明
    JavaScript的变量声明没有块级作用域, 例如在Java中, 可以这样声明b, 这个b的作用域仅在于if内部

    if (a == null) {
      String b = "c";
    }
    

    在JavaScript中, 只有两种作用域: 全局和局部, 在函数内任意语句中使用var声明的变量, 不管所在的语句块实际是否会执行, 都等价于在函数开头声明, 前面的代码等价于

    var name2 = 'What!';
    function a() {
        var name2;
        if (typeof name2 === 'undefined') {
            console.log('Undefined');
            name2 = 'Jack';
        } else {
            console.log('Hello ' + name2);
        }
    }
    a();
    

    这样产生的输出就容易理解了.

  • 相关阅读:
    C语言第三次博客作业---单层循环结构
    C语言第二次博客作业---分支结构
    C语言第一次博客作业——输入输出格式
    C语言--第0次作业
    Codeforces Round #341 Div.2 A. Wet Shark and Odd and Even
    Sources
    kuangbin_SegTree E (HDU 1698)
    (MST) HDOJ 1102 Constructing Roads
    kuangbin_SegTree B (HDU 1754)
    kuangbin_SegTree A (HDU 1166)
  • 原文地址:https://www.cnblogs.com/milton/p/14850654.html
Copyright © 2011-2022 走看看