在函数内创建全局变量 - 为什么这样做有效?
Creating global variables inside function - why does this work?
据我所知,在函数内部声明的变量是局部变量(使用或不使用 var
关键字)。
如果是这样那么为什么输出 5
?我不应该在调用 func2
时得到 ReferenceError
因为 x
只有 func1
知道吗?
<script>
function func1(){
x = 5;
}
function func2(){
document.write(x);
}
func1();
func2();
</script>
因为你没有定义为
function func1(){
var x = 5;
}
这意味着JS将使用不存在的全局变量x
,但是当你运行 func1.
"var"的添加定义了func1
局部范围内的变量。
function func1(){
x = 5;
}
等同于
var x; // In global scope
function func1(){
x = 5;
}
因为变量没有通过声明限定到 func1
。
如果是这种情况,那么您会在控制台中遇到错误,因为您正在尝试访问尚未定义的变量。
function func1(){
var x = 5;
}
Afaik, variables declared inside a function are local variables (using var keyword or not).
函数内声明的变量是局部变量,但您没有声明任何变量。您拥有的是所谓的 "implicit global",它仅适用于 "sloppy mode"。
来自MDN:
Assigning a value to an undeclared variable implicitly creates it as a global variable (it becomes a property of the global object) when the assignment is executed.
在严格模式下,您的代码会产生错误:
"use strict";
function func1() {
x = 5;
}
function func2() {
document.write(x);
}
func1();
func2();
"use strict";
function func1() {
window.x = 5;
}
function func2() {
document.write(x);
}
func1();
func2();
据我所知,在函数内部声明的变量是局部变量(使用或不使用 var
关键字)。
如果是这样那么为什么输出 5
?我不应该在调用 func2
时得到 ReferenceError
因为 x
只有 func1
知道吗?
<script>
function func1(){
x = 5;
}
function func2(){
document.write(x);
}
func1();
func2();
</script>
因为你没有定义为
function func1(){
var x = 5;
}
这意味着JS将使用不存在的全局变量x
,但是当你运行 func1.
"var"的添加定义了func1
局部范围内的变量。
function func1(){
x = 5;
}
等同于
var x; // In global scope
function func1(){
x = 5;
}
因为变量没有通过声明限定到 func1
。
如果是这种情况,那么您会在控制台中遇到错误,因为您正在尝试访问尚未定义的变量。
function func1(){
var x = 5;
}
Afaik, variables declared inside a function are local variables (using var keyword or not).
函数内声明的变量是局部变量,但您没有声明任何变量。您拥有的是所谓的 "implicit global",它仅适用于 "sloppy mode"。
来自MDN:
Assigning a value to an undeclared variable implicitly creates it as a global variable (it becomes a property of the global object) when the assignment is executed.
在严格模式下,您的代码会产生错误:
"use strict";
function func1() {
x = 5;
}
function func2() {
document.write(x);
}
func1();
func2();
"use strict";
function func1() {
window.x = 5;
}
function func2() {
document.write(x);
}
func1();
func2();