关于js函数自身的作用域的问题?

function a(){
    console.log(this);
}

    a();

常规定义一个函数a,它的作用域在a函数定义的时候已经确定,输出的this指向全局,这里没有异议。


$(元素).click(function(){
    console.log(this);
    a();
})

为这个元素绑定一个点击事件,回调函数里先输出this,指向$(元素),然后再调用a(),this指向的全局,没有异议。


假如:
1、我有函数b() ,c() ,d() , 与函数a()一样,都是全局定义,this也是指向全局。
2、我在为$(元素)添加点击事件,然后依次执行a,b,c,d函数。


问题:
1、如何在声明函数前决定它的作用域,例如我声明个变量,var ttt,在函数里声明,就是局部的。
2、在我调用a,b,c,d函数时,如何让这4个函数的this指向$(元素)?

阅读 2.9k
4 个回答

第一个我不懂你是什么意思,所以就回答第二个问题。
我理解的应该是这样:
先定义了这四个四个函数abcd,

function a(){
    console.log(this);
}
function b(){
    console.log(this);
}
function c(){
    console.log(this);
}
function d(){
    console.log(this);
}

然后

$(元素).click(function(){
    console.log(this);
    a.call(this);
    b.call(this);
    c.call(this);
    d.call(this);
});

就这样。

this是上下文,和作用域没关系

  1. 在函数声明前,也就是这个函数的作用域并没有生成,里面的变量自然无法声明,所以没有办法提前声明.

  2. 想要修改a,b,c,d四个函数的this,可以借用函数原型中的方法callapply这两个方法的第一个参数就是你要修改this指向谁,在你这个问题中你可以这样使用a.call(this).之余楼上说的箭头函数,箭头函数是ES6的特性,会锁定函数内部的作用域的this始终指向定义时候的this.这里并不太适用.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题