是否使用'var'声明变量是可选的?
这个问题在这里已经有了答案:
  他们的意思不同。  如果使用var则变量在您所在的范围内声明(例如函数)。  如果你没有使用var ,变量会遍历整个范围层,直到它通过给定名称或全局对象(如果你正在浏览器中执行它的话,窗口)遇到一个变量,然后它将附着在变量上。  它与全局变量非常相似。  但是,它仍然可以通过删除来delete (很可能由别人的代码也无法使用var )。  如果在全局范围内使用var ,则该变量是真正的全局变量,不能被删除。 
  在我看来,这是javascript最危险的问题之一,应该被弃用,或者至少提出警告警告。  原因是,很容易忘记var并且偶然会将一个公共变量名绑定到全局对象。  这会产生奇怪且难以调试的行为。 
  这是Javascript中棘手的部分之一,也是其核心功能之一。  用var声明的变量“开始其生命”就在你声明它的地方。  如果你忽略了这个var ,就好像你正在谈论一个你之前使用过的变量。 
var foo = 'first time use';
foo = 'second time use';
  关于范围,变量自动变为全局是不正确的。  相反,Javascript会遍历范围链,看看你之前是否使用过这个变量。  如果它发现一个以前使用过的同名变量的实例,它将使用它以及它声明的任何范围。如果它没有在任何地方遇到该变量,它最终会触发全局对象(在浏览器中的window )并将附加变量给它。 
var foo = "I'm global";
var bar = "So am I";
function () {
    var foo = "I'm local, the previous 'foo' didn't notice a thing";
    var baz = "I'm local, too";
    function () {
        var foo = "I'm even more local, all three 'foos' have different values";
        baz = "I just changed 'baz' one scope higher, but it's still not global";
        bar = "I just changed the global 'bar' variable";
        xyz = "I just created a new global variable";
    }
}
  与嵌套函数和回调一起使用时,这种行为非常强大。  了解什么functions以及范围如何工作是Javascript中最重要的事情。 
不,他们不是等同的。
  用myObj = 1;  你正在使用一个全局变量。 
后面的声明为你正在使用的范围创建一个局部变量。
尝试以下代码以了解差异:
external = 5;
function firsttry() {
  var external = 6;
  alert("first Try: " + external);
}
function secondtry() {
  external = 7;
  alert("second Try: " + external);
}
alert(external); // Prints 5
firsttry(); // Prints 6
alert(external); // Prints 5
secondtry(); // Prints 7
alert(external); // Prints 7
第二个函数会改变全局变量“external”的值,但第一个函数不会。
链接地址: http://www.djcxy.com/p/17343.html