javascript - 为什么 `var a= function(){}` 在以下情况下与 `function a(){}` 相似?

标签 javascript

我不明白这个OP接受的答案的一部分:

Javascript function scoping and hoisting

作者说:

"

此外,在这种情况下,

function a() {}

行为与

相同
var a = function () {};

”。

我知道函数表达式与函数声明不同,至少对于提升来说是不同的。为什么在这种情况下它们相似?

最佳答案

Why are they similar in this case?

因为var被提升(但未设置),就像函数声明被提升一样,这意味着有一个 aa = 10; 之前的本地范围内被评估,所以全局 a永远不会被修改 - 标识符查找找到本地 a首先这样设置

<小时/>

其他问题的相关部分

var a = 1;

function b() {
    a = 10;
    return;

    function a() {}
}
b();
alert(a);

Why is a === 1?

<小时/>

答案想说的是b等于

function b() {
    function a() {}
    a = 10;
    return;
}

类似于

function b() {
    var a = function () {};
    a = 10;
    return;
}

即有一个标识符a定义于 b ,所以

function b() {
    var a = 10;
    return;
}

现在,显然,全局 a不会被 b 修改

<小时/>

请注意 var 的位置并不重要,只是它在那里,下面的代码会产生相同的行为

function b() {
    a = 10;
    return;
    var a;
}

关于javascript - 为什么 `var a= function(){}` 在以下情况下与 `function a(){}` 相似?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31712889/

相关文章:

javascript - 轮询卡住、Pebble.js、ajax、node.js

javascript - Quasar + Vue + SSR - 如何隐藏敏感数据,例如 API key

javascript - firebase 返回快照 promise

Javascript请解释这段代码

javascript - 1901 年之前的任何年份的 Angular 最短日期验证不正确

javascript - 如何在 dc.js 中更改饼图和行图中标签的字体大小?

javascript - PHP JS 链接动态列表

javascript - 滑动时防止触摸启动

javascript - 当不相关的 div 为空时更改文本

javascript html 通过 if 语句进入变量