ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Javascript中的var变量声明作用域问题

2021-06-04 18:02:34  阅读:210  来源: 互联网

标签:console undefined 作用域 Javascript name2 typeof var log


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

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();

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

标签:console,undefined,作用域,Javascript,name2,typeof,var,log
来源: https://www.cnblogs.com/milton/p/14850654.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有