Why operator inside parenthesis changes `this` in function call(为什么圆括号内的运算符在函数调用中更改为`this`)
本文介绍了为什么圆括号内的运算符在函数调用中更改为`this`的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
谈话很便宜;请给我看代码。
// equals to this.test = "inside window"
var test = "inside window";
function f () {
console.log(this.test)
};
var obj = {
test: "inside object",
fn: f
};
obj.fn(); // "inside object" --> fine
(obj).fn(); // "inside object" --> fine
(1, obj).fn(); // "inside object" --> fine
(obj.fn)(); // "inside object" --> fine
(0 || obj.fn)(); // "inside window" --> why?
// reference equality check
console.log(
f === obj.fn &&
(obj.fn) === f &&
f === (1, obj.fn)
); // all equal :/
()和comma operator,正如您在最后一条语句中看到的那样,comma operator做了一些奇怪的事情。我怀疑它在返回值时执行赋值(因为如果我们执行赋值也会产生相同的结果),但我不确定。
更新:
&&、||运算符:(0 || obj.fn)()
推荐答案
给定:
foo.bar()
内部bar,this将为foo。
(有例外,例如bar是用箭头函数定义的,但在这种情况下不适用)。
给定:
const bar = foo.bar;
bar();
现在已在没有foo上下文的情况下调用了函数,因此this现在是默认对象(在浏览器中为window)。
表达式:(1, foo.bar)计算为右侧。这就是函数。
就像您已将其复制到变量一样,这会在您调用函数之前断开它与对象的连接,因此您将获得相同的效果。
没有赋值,因为您没有涉及变量,但您调用的是表达式的结果,而不是直接调用对象方法。
这篇关于为什么圆括号内的运算符在函数调用中更改为`this`的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:为什么圆括号内的运算符在函数调用中更改为`this`
基础教程推荐
猜你喜欢
- CORS:当凭据标志为真时,无法在 Access-Control-Allow-Origin 中使用通配符 2022-01-01
- 带角度的选项卡:仅使用 $http 在单击时加载选项卡 2022-01-01
- 逻辑运算符 ||在 javascript 中,0 代表 Boolean false? 2022-01-01
- 即使每次插入第一个输入的值不同,第二个输入仍显示相同的输入值 2022-01-01
- 在 Javascript 中使用 Fetch API 上传文件并显示进度 2022-01-01
- 使用 jQuery 在悬停时交换 DIV 类 2022-01-01
- 最佳动态 JavaScript/JQuery 网格 2022-01-01
- HTML5 画布调整为父级 2022-01-01
- 当木偶师打开Chrome时,不能使用Chrome扩展 2022-01-01
- 从快速中间件中排除路由 2022-01-01
