Javascript - 多个范围相关的问题

时间:2014-12-24 13:54:05

标签: javascript scope global-variables

请检查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前缀?

1 个答案:

答案 0 :(得分:2)

原因是jsfiddle在如下函数中运行代码:

window.onload=function(){
var a = 10;

function x() {
    a = 20;
    alert(this.a);
}

x();
}

因此,您的var aonload函数的本地,但this内的x指向全局window对象

如果您将小提琴设置更改为No wrap - in <head>(或<body>),它将按预期工作。 http://jsfiddle.net/mendesjuan/4a42n8g8/1/

问题1

var a不是全局的,因为它在一个函数中,如果它不属于任何函数,它将是全局的。

问题2

与问题1相同,var a实际上是在函数中定义的。