javascript – 用this或var声明变量?

前端之家收集整理的这篇文章主要介绍了javascript – 用this或var声明变量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用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关键字与函数作用域无关,是隐式设置的保留字,具体取决于函数调用方式,例如:

1 – 当函数作为方法调用时(该函数作为对象的成员调用):

obj.method(); // 'this' inside method will refer to obj

2 – 正常的函数调用

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.

您甚至可以使用callapply方法显式设置此值,例如:

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对象和方法时,此值的概念将非常有用.

原文链接:https://www.f2er.com/js/155807.html

猜你在找的JavaScript相关文章