javascript - 'this' 在 Javascript 函数中指的是什么

标签 javascript

我理解 this 关键字背后的一般概念,但我很难弄清楚它在实践中实际指的是什么。例如,在这两个示例练习中,我都猜错了数字。

对于问题1,我说alert会是'5',因为它指的是函数中匿名函数外的this.x。

在问题 2 中,我认为警报会是 5,因为这一行

var alertX = o.alertX;

会将变量 o 内属性 x 的值 5 绑定(bind)到新变量“alertX”,该变量成为下一行中的函数调用:alertX();

你能解释一下为什么我错了吗?

var question1 = function() {
    this.x = 5;
     (function() {
        var x = 3;
        this.x = x;
    })();
    alert(this.x);
};
var answer1 = 3; 


var question2 = function() {
    this.x = 9;
    var o = {
        'x':5,
        'alertX':function() { alert(this.x); }
    };
    var alertX = o.alertX;
    alertX();
}
var answer2 = 9; 

最佳答案

在第一种情况下,当您调用没有显式接收器的方法时,this 是全局对象(网络浏览器中的 window)。

与第二种情况类似:即使函数是在对象上定义的,而您在另一个对象中,通过使用 alertx() 调用函数,this 是设置为全局/窗口

简而言之:

  • 对于 foo.bar()bar 中的 this 将是 foo
  • 对于 bar()this 将是全局对象。
    • 这包括所谓的“自调用 lambda”,即 (function(){ ... })()
  • 对于 bar.call(whee)bar.apply(whee)this 将是 whee(因为这就是这些方法的作用)。

另一个例子:

var o1 = { name:"o1", f:function(){ console.log(this.name) } };
var o2 = { name:"o2" };
o2.gogogo = o1.f;
o2.gogogo(); // Will output "o2"

关于javascript - 'this' 在 Javascript 函数中指的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272503/

相关文章:

javascript - 带有数据库的 jQuery Mobile 可折叠项

javascript - 有没有办法优化 svg 的性能?

javascript - Google Charts API 数据表单元格颜色

javascript - 在部分不可见/事件时隐藏 iFrame

javascript - jQuery-validate - 选项卡上需要验证

javascript - JSONP无响应IE弹出 'Syntax Error'

javascript - 在两个 div 之间隐藏或显示

javascript - Moment.js - 使用减法的结束日期不正确

javascript - FetchError : request to http://localhost:3000/api/projects failed, 原因 : connect ECONNREFUSED 127. 0.0.1 :3000 (Express/Next. Js)

javascript - 使用react-date-picker时隐藏移动设备上的 native 键盘