对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'));
答案 0 :(得分:4)
从功能外部,您的console.log()
来电可以访问b
,但不能访问a
。变量a
由var
语句在函数中声明;然而,变量b
由a
的初始化表达式隐式地全局化。
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