【发布时间】:2019-06-05 17:02:01
【问题描述】:
当在函数范围内初始化一个变量时,除了函数本身之外,大概没有任何东西可以访问该变量。
为什么有时函数中的变量初始化可以全局访问?
下面是一些代码:
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 是否与更改范围有关?
【问题讨论】:
-
如果你使用一个没有定义的变量,它将被添加到全局范围中(如果你在严格模式下会抛出一个错误)
-
function sayHello() { var a; // undefined a = 'hello'; console.log(a); } }无效代码:您有一个额外的}。这个额外的}“属于”你的 sn-p 中不存在的函数吗? -
function sayGoodbye() { var b; b = 'Goodbye' }不是当您不使用var声明变量时提升的工作方式
标签: javascript scope hoisting