变量名称类似于函数名称 - 何时导致错误/何时不导致错误

时间:2016-08-25 14:32:18

标签: javascript

这个问题是关于函数和变量的相同名称。 请告诉我 - 为什么这段代码没有错误:

    var Task = new Task();
     
    function Task() {
        console.log('work!');
    }

但是这个不起作用:

start();
 
function start() {
  var Task = new Task();
};
 
function Task() {
    console.log('work!');
}
 

为什么会这样?

2 个答案:

答案 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();

如您所见,Taskundefined函数内的start覆盖。当函数和变量定义都在同一范围内时,这不会发生,因为varfunction基本上是相同的。

如果你遗漏var start,它也可以。

答案 1 :(得分:-2)

它与全局变量和局部变量有关。

函数中定义的变量是本地的 函数中定义的变量是全局变量 当前类中的所有函数(如果有的话)都可以使用全局变量