据我所知,函数内声明的变量是局部变量(使用var
关键字)。
如果是,那么为什么输出5
?在致电ReferenceError
时我不应该func2
,因为x
只知道func1
吗?
<script>
function func1(){
x = 5;
}
function func2(){
document.write(x);
}
func1();
func2();
</script>
答案 0 :(得分:2)
这是因为您没有将其定义为
function func1(){
var x = 5;
}
这意味着JS将使用不存在的全局变量x
,但是当你运行func1时将会这样。
“var”的添加定义了func1
的本地范围内的变量。
答案 1 :(得分:2)
Afaik,在函数内声明的变量是局部变量(使用var关键字或不使用)。
函数内的变量声明是本地的,但您没有声明任何变量。你拥有的是所谓的“隐含的全局”,它只能在“草率模式”下工作。
来自MDN:
在执行赋值时,为未声明的变量赋值会隐式地将其创建为全局变量(它将成为全局对象的属性)。
在严格模式下,您的代码会产生错误:
"use strict";
function func1() {
x = 5;
}
function func2() {
document.write(x);
}
func1();
func2();
答案 2 :(得分:1)
function func1(){
x = 5;
}
相当于
var x; // In global scope
function func1(){
x = 5;
}
由于变量未通过声明限定为func1
。
如果是这种情况,那么您将在控制台中遇到错误,因为您正在尝试访问尚未定义的变量。
function func1(){
var x = 5;
}
答案 3 :(得分:0)
get-branding-information