什么是函数绑定和this的动态作用域,以及如何通过call、apply和bind方法显式控制this指向?

26次阅读

this指向函数调用时的上下文对象,可通过call、apply、bind显式绑定;如greet.call(person, ‘Bob’, ‘Hello’)将this设为person并立即执行。

什么是函数绑定和this的动态作用域,以及如何通过call、apply和bind方法显式控制this指向?

this在JavaScript里,一直是个让人又爱又恨的“小妖精”。它不像其他变量那样规规矩矩,而是个“变色龙”,它的指向完全取决于函数被调用的方式,这种动态性就是我们常说的this的动态作用域。这无疑给开发者带来了不少困惑,尤其是在复杂的应用场景中。幸运的是,JavaScript也为我们提供了三把“瑞士军刀”——call、apply和bind,它们能让我们主动出击,显式地控制this的指向,把这个“小妖精”驯服得服服帖帖。

理解this的动态作用域,并掌握call、apply、bind的使用,是JavaScript进阶的必经之路。简单来说,this在大多数情况下,指向的是函数被调用时的那个“上下文对象”。

当我们直接调用一个函数时(比如func()),在非严格模式下,this通常指向全局对象(浏览器里是window,Node.js里是global),严格模式下则是undefined。而当函数作为对象的一个方法被调用时(比如obj.func()),this就指向那个对象obj。作为构造函数使用时(new Func()),this指向新创建的实例。这些都是this动态性的体现。

什么是函数绑定和this的动态作用域,以及如何通过call、apply和bind方法显式控制this指向?

SpeakingPass-打造你的专属雅思口语语料

使用chatGPT帮你快速备考雅思口语,提升分数

什么是函数绑定和this的动态作用域,以及如何通过call、apply和bind方法显式控制this指向?25

查看详情 什么是函数绑定和this的动态作用域,以及如何通过call、apply和bind方法显式控制this指向?

为了打破这种“被动”的指向,我们有了call、apply和bind。

  • Function.prototype.call(thisArg, arg1, arg2, …)
    • 作用:立即执行函数,并将其this上下文设置为thisArg。后续参数会逐个传递给函数。
    • 特点:参数是独立传递的。
    • 示例:
      function greet(name, message) {     console.log(`${message}, ${name}! I am ${this.who}.`); } const person = {     who: 'Alice' }; greet.call(person, 'Bob', 'Hello'); // Output: Hello,

以上就是什么是函数绑定和this的动态javascript java js node.js node 浏览器 app win 作用域 JavaScript 构造函数 JS undefined function 对象 作用域 严格模式 this prototype

javascript java js node.js node 浏览器 app win 作用域 JavaScript 构造函数 JS undefined function 对象 作用域 严格模式 this prototype

text=ZqhQzanResources