我们如何访问局部变量?

时间:2015-04-19 13:46:22

标签: javascript

a是否未定义或b是否未定义进行测试。然而令我困惑的是,当两者都是局部变量时,我们如何访问console.log中的a和b。它与我们在括号内定义函数的方式有关吗?我是JavaScript的新手,我正在努力了解它是如何工作的。

(function(){
    var a = b = 3;
})();

console.log("a defined? " + (typeof a !== 'undefined'));
console.log("b defined? " + (typeof b !== 'undefined'));

3 个答案:

答案 0 :(得分:4)

从功能外部,您的console.log()来电可以访问b,但不能访问a。变量avar语句在函数中声明;然而,变量ba的初始化表达式隐式地全局化。

var语句被解释为写成

var a = (b = 3);

var语句的语法是这样的,初始化b定义为局部变量。您可以使用类似代码或添加

来验证
"use strict";

var语句之前,并注意到您将从隐式全局使用b中收到错误。

答案 1 :(得分:1)

嗯,在你的例子中,你有一个"全球"变量b和局部变量a。只有b在函数外部可见。

当您尝试在控制台输出中引用a时,它将引用" global"变量a(尚未定义)。

b是"全球"因为没有定义它的var语句。该行的var仅适用于a

a是一个只在函数内部可见的局部变量(用var很好地声明)。但是,您仍可以在程序的其他部分中使用也称为a的变量。您的控制台输出就是一个例子。但这些是完全独立的变量。

答案 2 :(得分:1)

变量a位于IIFE中,因此在父作用域中不可见(它后面有var个关键字。)

变量b被假定来自IIFE的外部范围(具有var关键字)。

typeof运算符的工作方式,它允许您为类型测试添加任何有效的变量名称,甚至未声明的,即:

var a = 5;
var b;
console.log(typeof a); // number
console.log(typeof b); // undefined
console.log(typeof totallyNotMentionedAnywhereElse); // undefined