使用this或var声明变量之间有什么区别?
var foo = 'bar'
要么
this.foo = 'bar'
什么时候使用这个和var?
编辑:是否有一个简单的问题,我可以在决定是否要使用var或this时询问自己
解决方法
如果它是
global code(代码不是任何函数的一部分),那么您将使用两个片段在全局对象上创建属性,因为这在
global code中指向全局对象.
这种情况的不同之处在于,当使用var语句时,无法删除该属性,例如:
var foo = 'bar'; delete foo; // false typeof foo; // "string" this.bar = 'baz'; delete bar; // true typeof bar; "undefined"
(注意:上面的代码片段在Firebug控制台中的行为会有所不同,因为它使用eval运行代码,并且在Eval代码执行上下文中执行的代码允许删除使用var创建的标识符,请尝试here)
如果代码是函数的一部分,您应该知道this关键字与函数作用域无关,是隐式设置的保留字,具体取决于函数的调用方式,例如:
obj.method(); // 'this' inside method will refer to obj
myFunction(); // 'this' inside the function will refer to the Global object // or (function () {})();
3 – 使用新运算符时:
var obj = new Constructor(); // 'this' will refer to a newly created object.
function test () { alert(this); } test.call("hello!"); //alerts hello!
您还应该知道JavaScript只有函数作用域,而使用var语句声明的变量只能在同一个函数或下面定义的任何内部函数中访问.
编辑:查看您发布到@David’s answer的代码,让我评论:
var test1 = 'test'; // two globals,with the difference I talk this.test2 = 'test'; // about in the beginning of this answer //... function test4(){ var test5 = 'test in function with var'; // <-- test5 is locally scoped!!! this.test6 = 'test in function with this'; // global property,see below } test4(); // <--- test4 will be called with `this` pointing to the global object // see #2 above,a call to an identifier that is not an property of an // object causes it alert(typeof test5); // "undefined" since it's a local variable of `test4` alert(test6); // "test in function with this"
您无法访问函数外部的test5变量,因为它是本地作用域的,并且只存在该函数的作用域.
为了声明变量,我鼓励你总是使用var,这就是为什么做的.
当您开始使用constructor functions对象和方法时,此值的概念将非常有用.