本地定义的函数我有这样的代码片段:范围在JavaScript
sayHi()
if (1) {
function sayHi() { alert(1) }
} else {
function sayHi() { alert(2) } // <--
}
它是如何真正起作用?这些函数在if/else块中定义。那么它们如何在if/else块之外进行限定呢?
本地定义的函数我有这样的代码片段:范围在JavaScript
sayHi()
if (1) {
function sayHi() { alert(1) }
} else {
function sayHi() { alert(2) } // <--
}
它是如何真正起作用?这些函数在if/else块中定义。那么它们如何在if/else块之外进行限定呢?
所有内容都在Javascript的功能级别范围内,而不是像大多数其他语言一样在块级别上。因此,如果您在for循环中定义var
,它将被“悬挂”到包含函数的顶部。
这不完全正确。 'var'和'function'声明是函数范围的,但'let','const'和'class'声明是块范围的。 – Frxstrem
该函数的作用域是整个包含函数,因为函数声明被挂起。但是,在执行if
或else
块之前,函数没有为其定义分配给它。它相当于:
var sayHi;
sayHi();
if (1) {
sayHi = function() { alert(1); };
} else {
sayHi = function() { alert(2); };
}
他们不是。当我运行它时,我得到'TypeError:sayHi不是函数' – bejado
这个问题似乎很不清楚......... –