Javascript:差异两种方式在函数中声明变量

时间:2012-07-31 08:11:25

标签: javascript

我想创建一个对象。而且,在我读过的几乎所有代码中,他们经常使用这种风格:

function student(_id, _name, _year){
   this.id = _id;
   this.name = _name;
   this.year = _year;
}

但是,我不知道下面的代码有什么区别:

function student (_id, _name, _year){
   var id = _id;
   var name = _name;
   var year = _year;
}

我已经测试了一些示例,alert属性来进行筛选,并且看不出任何差异。

谢谢:)

4 个答案:

答案 0 :(得分:3)

使用 var 声明变量时,它们仅在函数/构造函数的范围内可见。他们是私人所以说。

在这种情况下,使用 this 与构造函数一起使用。当您实例化学生时,分配给该学生的所有值都将公开访问。

首先,我建议您将学生重命名为学生,并使用大写 S 。这是一个约定,表明它是构造函数,您需要使用 new 关键字。

function Student(id, name, year){
   this.id = id;
   this.name = name;
   this.year = year;
}

如果您现在实例化学生,则可以访问值...

var student = new Student(1, "Name", 2012);
console.log(student.year); // => 2012

使用var时,你不能......

function Student (id, name, year){
   var id = id;
   var name = name;
   var year = year;
}

var student = new Student(1, "Name", 2012);
console.log(student.year); // => undefined

答案 1 :(得分:2)

区别在于第一个属性是公共的,而第二个属性是私有的。

带有或不带下划线的前导var没有区别。第二个例子使参数不匹配。 id vs _id

答案 2 :(得分:2)

function student(_id, _name, _year){
   this.id = _id;
   this.name = _name;
   this.year = _year;
}
var s1 = new student(1, 'mike', 20);
console.log(s1.name); // give you mike

function student(_id, _name, _year){
   var id = _id;
   var name = _name;
   var year = _year;
}

var s1 = new student(1, 'mike', 20);
console.log(s1.name); // give you undefined

答案 3 :(得分:2)

关于变量的范围。

在您的第一个示例中,您将id,name和year指定为学生的外部可访问属性。例如:

student.id, student.name, student.year

但是,在第二个示例中,这些变量只有内部学生函数。您无法从外部访问其值。