var m = function() { a = 3; console.log(a, b ,this)};var init = function () { var a = 1; var b = 10; m.call(this);}init();或var m = function() { a = 3; console.log(a, b ,this)}.bind(this);var init = function () { var a = 1; var b = 10; m();}init();会报错,b is not defined, m里的this还是指向了windows如何通过不传参数的形式,可以访问到init中的变量b?换句话说,可以通过改变m函数调用时的this指向,访问到init中的b嘛?
1 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
始终记住一句话:this永远指向最后调用他的对象。
当你执行init时,是window对象在执行,最后调用了上面m方法,因为在这个方法中,变量a是没有声明的,所以提升到全局层,因此你是可以在window对象下找到变量a的。如果要达到题主所说的效果,在题主的基础上可以这样修改:
var m = function(b) {
a = 3;
console.log(a, b ,this)
};
var init = function () {
var a = 1;
var b = 10;
m.call(this , b);
}
init();
或者说将init提升到一个对象里面去吧:
var m = function() {
a = 3;
console.log(this.a, this.b ,this)
};
var aa = {
a : 1,
b : 10,
init : function () {
this.a = 2;
this.b = 20;
m.call(this);
}
}
aa.init();
添加回答
举报
0/150
提交
取消