请检查http://jsfiddle.net/4a42n8g8/中的代码。它警告“未定义”。为什么?我有两个问题。
var a = 10;
function x() {
a = 20;
alert(this.a);
}
x();
1)函数x中的变量“a”不是全局变量,因为它没有var前缀吗?或者是否带有或不带var前缀,函数中的任何变量都不是全局变量?
2)由于var a = 10是在函数外部定义的,它是不是使它成为全局变量?或者是所有全局变量都不应该有一个var前缀?
答案 0 :(得分:2)
原因是jsfiddle在如下函数中运行代码:
window.onload=function(){
var a = 10;
function x() {
a = 20;
alert(this.a);
}
x();
}
因此,您的var a
是onload
函数的本地,但this
内的x
指向全局window
对象
如果您将小提琴设置更改为No wrap - in <head>
(或<body>
),它将按预期工作。 http://jsfiddle.net/mendesjuan/4a42n8g8/1/
问题1
var a
不是全局的,因为它在一个函数中,如果它不属于任何函数,它将是全局的。
问题2
与问题1相同,var a
实际上是在函数中定义的。