最近我对 javascript 提升行为感到困惑,现在我陷入了困境。
所以,有两个例子。
var alpha = 'alpha';
var beta = 'beta';
f(); //beta
var f = function f1() {
console.log(beta);
};
function f() {
console.log(alpha);
}
f(); // alpha
第一个按预期工作,因为当 Javascript 设置词法环境时,函数声明会覆盖我们的变量 f(值为“未定义”)。
但第二个给了我动力,我不明白一些事情。
var alpha = 'alpha';
var beta = 'beta';
f(); // - alpha
function f() {
console.log(alpha);
}
var f = function f1() {
console.log(beta);
};
f(); // beta
为什么变量f没有提升到代码的顶部,并覆盖我们之前提升的函数?
为什么在“第一个f”打电话给我收到“阿尔法”。我认为,这一定是一个错误,例如:
“f 不是函数”,因为在first f我期望 f 会是“不明确的”.
Given var foo = something
,仅提升变量声明。
这意味着var foo
被吊起但foo = something
将按照阅读顺序运行。
Given function foo() {}
, 变量声明and功能分配均已提升。这将创建变量foo
并赋予它函数的值。
如果您拥有上述两者,那么您可以声明该变量两次(没有额外的效果)并为其分配函数的值(因为这是唯一的分配)。
所以在你的第二个例子中......
函数声明被提升,所以f(); // - first f
称之为。
函数表达式的赋值没有提升,但是f(); // ** - second f
按正常阅读顺序出现在它之后,因此第二次调用foo()
击中那个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)