这个问题是关于函数和变量的相同名称。 请告诉我 - 为什么这段代码没有错误:
var Task = new Task();
function Task() {
console.log('work!');
}
但是这个不起作用:
start();
function start() {
var Task = new Task();
};
function Task() {
console.log('work!');
}
为什么会这样?
答案 0 :(得分:6)
通过名称提升,您的第一个代码基本上是这样的:
var Task; // (undefined)
Task = function () {
console.log('work!');
};
Task = new Task();
你的第二个是这样的:
var start, Task;
start = function () {
var Task; // (undefined)
Task = new Task();
};
Task = function () {
console.log('work!');
};
start();
如您所见,Task
被undefined
函数内的start
覆盖。当函数和变量定义都在同一范围内时,这不会发生,因为var
和function
基本上是相同的。
如果你遗漏var
start
,它也可以。
答案 1 :(得分:-2)
它与全局变量和局部变量有关。
函数中定义的变量是本地的 函数中定义的不变量是全局变量 当前类中的所有函数(如果有的话)都可以使用全局变量