功能行为混乱
Function behavior confusion
我很困惑为什么下面的代码只提醒b2值。b1怎么了?需要帮助
var B = (function(){
var name = "";
return function(n){
name = n;
this.sayHello = function(){
alert("Hi " + name);
}
}
})()
var b1 = new B("xxx");
var b2 = new B("yyy");
b1.sayHello();
b2.sayHello();
如果在闭包中声明name
,它将起作用。我的猜测是,如果你不在其范围内声明该变量,闭包将始终使用name
的外部声明版本,在你的例子中,它将始终是yyy
,因为这是它设置为的最后一个值。
var B = (function () {
return function (n) {
var name = n || 'David';
this.sayHello = function () {
alert("Hi " + name);
}
}
})()
演示
注意,为了防止在构造函数中未传递任何内容时创建错误,我添加了一个默认选项,在本例中为"David"。
要测试的正确代码如下:
var B = (function(){
var name = "";
return function(n){
name = n;
this.sayHello = function(){
alert("Hi " + name);
}
}
})()
var b1 = new B("xxx");
b1.sayHello();
var b2 = new B("yyy");
b2.sayHello();
如果您先调用var b1 = new B("xxx");
,然后调用var b2 = new B("yyy");
,则变量name
将被覆盖,从而导致您注意到的奇怪行为。
演示
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 正在获取select上的功能id
- Rhino打印功能
- 使用(navigator.geolocation)检测浏览器功能错误
- 主体单击删除功能上的输入框宽度
- JQuery使用相同的功能自动完成各种输入文本
- 功能行为混乱