猿问

关于js的this指向。

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嘛?


宝慕林4294392
浏览 453回答 1
1回答

慕的地6264312

始终记住一句话: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();
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答