不理解局部和全局变量的概念

时间:2018-06-18 22:42:13

标签: javascript

好吧,这只是一个快速的...我可以完全理解范围。每当我把一个变量放在一个函数里面时,它都是未定义的。它似乎是唯一的方式来声明它的函数OUTSIDE。什么给出了什么?我只是误解了局部变量和全局变量的概念吗?因为似乎全局变量是唯一有效的...

编辑:

简单的例子......

let a = 'something';
function myFunction() {
    // Code block
};

这有效

但下面给出了未定义的变量:

function myFunction() {

    let a = 'something';

    // Code block
};

2 个答案:

答案 0 :(得分:4)

首先让我们来看看局部变量和全局变量之间的差异。

  

LOCAL VARIABLES - 在函数或循环内定义的任何变量。如果变量是在某个函数/循环中定义的,则只能在该函数/循环中访问它。

例如:



function number() {
  let a = 0;
  
  // Can access a here.
}

// Cannot access a here.




  

GLOBAL VARIABLES - 任何未在任何函数或循环内定义的变量。这些变量可以在任何地方访问。

例如:



let b = 0;
function number() {
  // b can be accessed here.
}
// b can be accessed here.




变量的范围是可以访问它的位置。例如,function number()内定义的局部变量的范围是number()函数,因为它只能在那里访问

另一个快速的事情(感谢Mikael Lennholm)var没有将变量范围限定为循环(或任何非函数语句块),它只将其范围限定为当前函数。要将变量范围限定为任何语句块,您必须使用let/const

现在让我们来看看你的例子:

这是第一个例子:



let a = 'something';
myFunction();
function myFunction() {
    console.log(a);
};




这很好,这就是你所说的。

这是你说的第二个例子:



function myFunction() {

    let a = 'something';

    console.log(a);
};

myFunction();




但是,如果单击“运行”按钮,您实际上会看到它确实有效,它会被记录下来。如果您在此之后转到并在控制台中检查变量a当然是未定义的,因为a只能在myFunction()函数中访问,并且控制台不是在那个职能部门。

你说脚本不起作用,很可能是因为别的东西(如果是因为这样,控制台就会出错)。您可以尝试在这里发布网站,我可以帮助您。

希望这有助于你:)

答案 1 :(得分:1)

全局变量是您可以在代码中的任何位置访问它们的变量。

局部变量仅限于它们的范围,如函数,模块,类等。

如果你定义一个局部变量,它可以在嵌套级别访问,如闭包。

如果您定义了一个全局变量并且您定义了与本地变量相同的名称,则本地覆盖全局变量,那么请小心。