- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
下面两个 JavaScript 函数有什么区别?我知道用 var 声明的变量在函数内部是局部的,如果用 this` 关键字声明,则会暴露给外部词。
function student(param1, param2, param3) {
this.name = param1;
this.age = param2;
this.address = param3;
}
和
function student(param1, param2, param3) {
var name = param1;
var age = param2;
var address = param3;
}
最佳答案
简短回答:您将使用第一个作为构造函数。第二个函数什么也不做。如果您想使用“私有(private)变量”,请通过闭包通过实例方法引用构造函数中的函数范围变量。
此函数将按以下方式用于创建学生。传入的参数赋值给新建的学生对象。
function student(param1, param2, param3){
this.name = param1;
this.age = param2;
this.address = param3;
}
var student1 = new student('steve', 22,'333 E 3rd Ave');
var student2 = new student('rachel', 34,'111 N 1st St');
console.log(student1.name); // 'steve'
console.log(student2.name); // 'rachel'
第二个不能满足构造函数的要求。
它声明具有未使用的功能范围的变量。一旦 student
函数的执行结束,其中定义的 3 个变量将被垃圾回收。这个函数似乎没有完成任何事情。
你希望这个函数做什么?它不能以相同的方式使用:
function student(param1, param2, param3){
var name = param1;
var age = param2;
var address = param3;
}
var badStudent = new student('Greg', 22,'222 W 2nd Rd');
console.log(badStudent.name); // undefined
编辑
有人提出如何在构造函数中使用用 var
声明的变量来创建“私有(private)成员变量”。使用闭包:
function student(param1, param2, param3) {
var name = param1;
var age = param2;
var address = param3;
this.getName = function(newName) {
if (newName)
name = newName;
return name;
};
}
var myStudent = new student('steve', 22,'333 E 3rd Ave');
console.log(myStudent.name);
console.log(myStudent.getName());
console.log(myStudent.getName('dan'));
console.log(myStudent.getName());
请注意,因为实例方法 getName
引用了在构造函数中声明的函数范围变量,所以引用这些变量的闭包仍然存在。由于闭包,一旦构造函数结束,仍然存在对变量的引用,并且它们不会被垃圾收集。因此,通过实例方法,您可以获取和设置此变量,该变量无法通过构造函数的结果对象访问。
关于javascript - 试图理解两个简短的 JavaScript 函数中的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41658242/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!