将“this”对象分配给函数内的变量有啥用? [复制]
Posted
技术标签:
【中文标题】将“this”对象分配给函数内的变量有啥用? [复制]【英文标题】:What is the usage of assigning "this" object to a variable inside a function? [duplicate]将“this”对象分配给函数内的变量有什么用? [复制] 【发布时间】:2020-05-15 01:08:51 【问题描述】:我见过这样的事情:
function fnx()
ctrl = this;
this.thisedVar = "thisedVar from fnx"
我试图弄清楚它有什么用处。如果执行该函数,然后将其与 ctrl 进行比较,则它们是相同的:
fnx();
console.log(this === ctrl) // true
这就是为什么我不明白将this
分配给变量的目的是什么。
谁能解释一下,好吗?谢谢。
【问题讨论】:
这样你想要的 this 可以从另一个范围访问。例如。在回调内部 你能提供一个小例子吗?我真的很感激。 查看ctrl
的声明位置以及它在其他哪些位置使用。如果您不向我们展示完整的代码,我们无法告诉您它的用途。
如果您在function fnx() ...
中声明了另一个函数,并且在该嵌套函数中想要引用fnx
,则您不能。通过将fnx
的引用存储为变量,您现在可以从内部的任何位置访问它。
为什么要将一个变量设置为另一个变量。保存对值/对象的引用。这里也一样。在那一刻需要对此进行引用,很难知道它是什么,因为您没有显示所有代码。 developer.mozilla.org/en-US/docs/Web/javascript/Reference/…
【参考方案1】:
当您将变量分配给一个值而不使用var
时,它指的是全局变量。因此,如果您将 this
分配给 ctrl
这意味着您将 Window obecjt this
分配给全局变量 `ctrl.
因此,当您将ctrl
与this
(再次是Window)对象进行比较时,它是相同的,因为您在函数执行后进行匹配。
【讨论】:
【参考方案2】:在大多数情况下,this 的值取决于函数的调用方式(运行时绑定)。执行时不能通过赋值来设置,每次调用函数时可能都不一样。
您将 THIS 分配给一个变量,以便保存该值。
阅读更多:https://medium.com/tech-tajawal/javascript-this-4-rules-7354abdb274c
【讨论】:
【参考方案3】:var a = function()
var THIS = this;
this.s = "Hello World";
this.runMe = function()
window.setTimeout(function()
console.log(this.s);
, 100);
var a2 = function()
var THIS = this;
this.s = "Hello World";
this.runMe = function()
window.setTimeout(function()
console.log(THIS.s);
, 100);
b = new(a);
b.runMe();
b2 = new(a2);
b2.runMe()
输出:
未定义
你好世界
类 a(对象 b)返回 undefined,因为 this
在回调范围内。
类 a2(对象 b2)返回 Hello World
,因为 this
属于类 a2。
【讨论】:
以上是关于将“this”对象分配给函数内的变量有啥用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章