首页 > 解决方案 > 为什么函数中初始化的变量可以全局访问?

问题描述

当在函数范围内初始化变量时,除了函数本身之外,大概没有任何东西可以访问该变量。

为什么有时可以全局访问函数中的变量初始化?

下面是一些代码:


function sayHello() {
  a = 'hello';
  console.log(a);
 }
}

吊装后居然变成了这样:

function sayHello() {
  var a; // undefined
  a = 'hello';
  console.log(a);
 }
}

sayHello() // outputs 'hello'
console.log(a) // Reference error: a is not defined.

这一切都很好,直到发生这种情况:


function sayGoodbye() {
  var b = 'Goodbye';
}

吊装后居然变成了这个

function sayGoodbye() {
  var b;
  b = 'Goodbye'
}

sayGoodbye() // undefined
console.log(b) // outputs 'Goodbye'

为什么在调用 sayGoodbye 之后,变量 b 可以全局访问或在函数范围之外访问,而对于 sayHello,存在引用错误?

console.log 是否与更改范围有关?

标签: javascriptscopehoisting

解决方案


如果您在不使用严格模式的情况下分配变量而不声明它成为全局变量。

function sayGoodbye() {
  b = 'Goodbye';
}

它成为了

var b;
function sayGoodbye() {
    b = 'Goodbye';
}

推荐阅读