箭头函数(Arrow functions)是ES6(ECMAScript 2015)引入的一种更简洁的函数写法。它们提供了一种更短的语法来写函数表达式,并且不绑定自己的 this、arguments、super 或new.target。这些函数表达式最适合用于非方法函数,并且它们不能用作构造函数。 箭头函数的基本语法如下: javascript const functionName = (parameters)...
箭头函数内的 this 指向外层的 this。 所以要知道箭头函数的 this 就得先知道外层 this 的指向,需要继续在外层应用七步口诀。 2. new 当使用 new 关键字调用函数时,函数中的 this 一定是 JS 创建的新对象。 读者可能会有疑问,“如果使用 new 关键调用箭头函数,是不是箭头函数的 this 就会被修改呢?”。 我们...
regularFunction:function() { console.log(this.property1 +' '+this.property2); }, // Object中尽量不要使用箭头函数 arrowFunction: ()=> { console.log(this.property1 +' '+this.property2); } }; myObject.regularFunction();// 输出:Hello World myObject.arrowFunction();// 输出:undefined un...
(2)、箭头函数中的this指向某个对象 如果在某个函数内部定义箭头函数,那么这个箭头函数的this值就会绑定到外部函数的this值。 ⚠️ 外部函数的this是调用时绑定的,这意味着内部定义的箭头函数this也会跟着发生变化。 function outerFunction() { this.name = "outerFunction"; let arrowFunction = () => { ...
function bar() {console.log(Object.prototype.toString.call(this));}bar.call(7); // [object Number] 1. 2. 3. 4. bind 方法 ECMAScript 5 引入了 Function.prototype.bind。调用f.bind(someObject)会创建一个与f具有相同函数体和作用域的函数,但是在这个新函数中,this将永久地被绑定到了bind的第一...
那就报错。ES6的arrow function走的则是「提供合理的this值」的路线,也就是使用当前词法上下文的this。
答案是:’汪‘ ,因为talk被调用时,this 上下文是 dog 对象 这边要强调的一点是 无论是场景一中 的cat.talk和 catTalkFunc 还是 场景二里的dog.talk其实并没有什么特别的处理 都只是同一个函数的引用即 function(){ console.log(this.sound); }
const obj = { name: 'Alice', regularFunction: function() { console.log(this.name); }, arrowFunction: () => { console.log(this.name); }};obj.regularFunction(); // 'Alice',this指向obj对象obj.arrowFunction(); // undefined,箭头函数的this指向在定义时确定,这里指向全局对...
可以看到引擎在调用函数时要判断函数类型(FunctionKind),只要不是箭头函数(ArrowFunction)就会提供this绑定。箭头函数是个特例受到了特殊对待。 所以,this是属于执行上下文的一部分,同时也是引擎唯一一个暴露给外部JS代码用以访问当前执行上下文的通道,而引擎把箭头函数的通道给关了,表明引擎并不希望把箭头函数的执行上下文...
1.1 在实函数中的this 在实函数中,this 的值是取决于它所处的上下文的模式。 Sloppy模式:this 指的是全局对象(在浏览器中就是window)。 1 2 3 4 function sloppyFunc() { console.log(this === window); // true } sloppyFunc(); Strict模式:this 的值是undefined。 1 2 3 4 5 function str...