功能范围理解不清楚

Vik*_*ran 5 javascript

var a = 1;
function b() {
    a = 10;
    return;
    function a() {}
}
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)

如何显示1的输出?什么是

return;
function a() {}
Run Code Online (Sandbox Code Playgroud)

在功能体内执行?

Poi*_*nty 6

在函数中用最后一行声明符号"a".这是受赋值声明影响的"a".

函数声明语句被提升到函数的顶部并首先被解释.因此,赋值语句您声明一个名为"a"的函数("b"函数的本地函数)有效地发生.因此,赋值会影响符号,而不是全局"a".

请记住,变量不是键入的,因此将函数名称绑定到函数的事实并不会阻止它在以后被赋值为数值.


Jas*_*ing 4

您的代码具有误导性,并且其风格使人们认为执行顺序很重要。如今的标准 JavaScript 引擎将在运行之前将其重新格式化为:

var a = 1,
b = function() {
    var a = function() {};
    a = 10;
    return;
};
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)

现在您可以了解实际发生了什么。“a”在函数“b”内再次声明,因此现在实际上有两个“a”变量。一个是“window.a”,另一个是“b var a”,但不是“ba”,因为它在闭包或函数之外不可访问。

换句话说,你得到了你所编写的代码。

请使您的代码可读并且不要混淆要点。