gpt4 book ai didi

javascript - 使用绑定(bind)来更改范围

转载 作者:行者123 更新时间:2023-12-03 10:47:25 25 4
gpt4 key购买 nike

我想了解如何使用bind来更改返回结果时执行的函数的范围。

  1. .bind 到底是在什么上执行的?
  2. 为什么 .bind 会影响函数内执行的代码范围?

这是我的代码:

// scope is window...
console.log(this)

// with bind -> scope is window...
$.get("https://api.github.com/users/octocat/gists", function(result) {
var lastGist = result[0];
console.log(this)
}.bind(this));

// without bind -> scope is $.get
$.get("https://api.github.com/users/octocat/gists", function(result) {
var lastGist = result[0];
console.log(this)
});

我也尝试了以下代码,但bind()在这里似乎没有影响:

var a = function(){console.log(this)}.bind(this)    
var b = function(){console.log(this)}

最佳答案

这个bind()方法不是来自jQuery,而是来自标准内置函数。它的定义是:

The bind() method creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called.

下面是一个示例代码来说明其行为:

this.x = 9; 
var module = {
x: 81,
getX: function() { return this.x; }
};

module.getX(); // 81

var getX = module.getX;
getX(); // 9, because in this case, "this" refers to the global object

// Create a new function with 'this' bound to module
var boundGetX = getX.bind(module);
boundGetX(); // 81

关于javascript - 使用绑定(bind)来更改范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28522597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com