🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 3. this 与 bind call apply ### 1. this javascript的顶级作用域是window, 全局变量是window的属性,函数是window的方法 this的指向: 1. 在事件中,this指向正在执行事情的当前对象 2. 在方法中,谁调用方法,this指向谁 ```js var a= 10; //window.a=10 function b(){ console.log(this.a); } b(); //window.b(); //console.log(window.a) ``` ### 2. bind() 方法 原理:bind() 会改变函数执行的上下文(作用域),改变的是函数本身,不会立即执行 例如: ```js var name = "xu"; var obj = { name: 'objname' } function getName() { console.log(this.name); }; getName() // 此时会打印 'xu' ``` 使用 bind() 方法 ```js var name = "xu"; var obj = { name: 'objname' } function getName() { console.log(this.name); }; var change = getName.bind(obj); change(); // 此时会打印 'objname' ``` ### 3. call() 方法 原理:call() 方法在函数执行时改变函数的作用域,传递的参数为(this指向,函数本身接受参数值) 例如: ```js var [a, b] = [10, 20]; // 解构赋值 var obj = { a: 100, b: 200 } function add(a, b) { console.log(this.a + this.b); } add(a, b); // 30 add.call(obj, a, b); // 300 ``` ### 4. apply 原理:apply 与 call 的区别仅在于传递给函数的参数为数组形式。如: ```js add.apply(obj, [a, b]); // 300 ```