Javascript 范围因传递回调函数的方式而异
Javascript scope different depending how you pass callback function
function DoSomething()
{
var scope = this;
}
请考虑以下调用它的方法:选项 1:
var self= this;
$someElement.change(self.DoSomething);
选项 2:
var self= this;
$someElement.change(function(){self.DoSomething();});
为什么当触发更改事件时,第一行代码导致scope
成为触发事件的元素,但第二行代码导致与self
相同但第二行scope
?
由于我不明白这里的概念,所以我很难谷歌正确的搜索词。
jQuery在原始元素的上下文中调用给定的函数。
选项 1:
您已将self.DoSomething
作为函数传递。
jQuery将在$someElement
的上下文中调用self.DoSomething
:
执行以下代码:
var self = this;
self.DoSomething.call($someElement);
function DoSomething()
{
// this = $someElement
var scope = this;
}
在DoSomething
this
内等于被叫方 - $someElement
。
选项 2:
您已将匿名函数作为函数传递。
jQuery将在$someElement
上下文中调用匿名函数:
var self = this;
function() {
self.DoSomething();
}.call($someElement);
function() {
// this = $someElement, as well
self.DoSomething(); // LOOK! You call self's method. Not within any context
}
function DoSomething()
{
// default function call, default this is presented
}
相关文章:
- 在phonegap中为android调用onload函数的最佳方式
- 以不同的方式调用javascript函数
- 我想以异步方式执行常规函数
- 有没有一种优雅的方式来告诉esint,以确保我们're没有使用任何ES6语法/函数
- 我想要相同的函数以两种方式反应
- 如果变量不是't已传递给函数.这是正确的方式吗
- 以编程方式调用javascript函数
- 为什么模块化幂函数在 Python 和 Javascript 中对于大数字的工作方式不同
- Javascript - 以编程方式执行所有函数输入的方法
- 以 func(a)(b)(c) 的方式调用的 Javascript 函数
- 如何获取以编程方式定义nodejs函数的位置
- 在Javascript构造函数中定义属性的正确方式
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- 另一种方式是Javascript中的函数堆叠
- 如何制作一个JavaScript函数,处理多组输入,以同样的方式进行数学处理
- 以两种不同的方式使用函数
- javascript存储函数的OOP方式
- 函数未以编程方式启动.click()
- 如何用两种不同的方式调用同一个函数
- 在创建 toLowerCase 函数时,一种方式比另一种方式更好