Javascript在调用者“方法”之间更改变量
Javascript changes variable between caller "methods"
给定:
function testfunc(i) {
this.foo = function() {
i = 2;
console.log("testfunc.foo before bar: " + i);
this.bar();
console.log("testfunc.foo after bar: " + i);
};
this.bar = function() {
i = 3;
console.log("testfunc.bar: " + i);
};
}
var testvar = {
foo: function() {
i = 4;
console.log("testvar.foo before bar: " + i);
this.bar();
console.log("testvar.foo after bar: " + i);
},
bar: function() {
i = 5;
console.log("testvarbar: " + i);
}
};
var a = new testfunc();
var b = Object.create(testvar);
i = 1;
a.foo();
console.log("main: " + i);
b.foo();
console.log("main: " + i);
结果是:
"testfunc.foo 在柱线之前: 2" 范围.html:37
"testfunc.bar:3"范围.html:44
"testfunc.foo after bar: 3" scope.html:39
"主:1"范围.html:66
"testvar.foo 在柱线之前: 4" 范围.html:51
"测试变量:5"范围.html:58
"testvar.foo 后柱线:5" 范围.html:53
"主:5"范围.html:68
是否应该是这样的,i 变量在 javascript 对象中从一个方法/函数继承到另一个方法/函数?这是否意味着在javascript中实例化对象的唯一安全方法是在函数上使用"new",还是我完全错过了重点?
你的变量i
是一个全局变量(它不是在本地声明的,所以Javascript只是让它全局的),所以无论你在哪里改变它,它都是你正在使用和修改的变量。
如果您希望i
是方法的本地方法,请将var
放在方法前面的每个位置,如下所示:
this.foo = function() {
var i = 2;
console.log("testfunc.foo before bar: " + i);
this.bar();
console.log("testfunc.foo after bar: " + i);
};
如果您希望i
成为对象的属性,请使用 this.i
引用它。
this.foo = function() {
this.i = 2;
console.log("testfunc.foo before bar: " + this.i);
this.bar();
console.log("testfunc.foo after bar: " + this.i);
};
如果你只是引用一个未定义的变量,那么Javascript会让它成为一个隐式的全局变量,然后作为单个全局变量提供给所有代码。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- java.net和javascript之间正则表达式的差异
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在控制器和数据对象之间同步数据
- 在单元测试中,当[method]语句在请求之间时如何改变$httpBackend
- 使用jQuery在改变图像之间添加平滑度
- Jquery的点击功能在3个类之间改变.为什么不工作呢?
- 每秒钟在红色和绿色之间改变背景颜色
- Jquery改变两个元素之间的文本
- 值在ajax调用之间不会改变
- Regex在标签之间改变文本
- 当拖动一个小元素时,是否有可能避免在CSS光标类型之间改变?
- 允许子域之间的跨站点请求,而不改变第二个子域的文件内容
- 改变javascript对象原型的两种方法,它们之间的区别是什么?
- 在改变状态和控制器之间保存数据