首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用匿名函数的MDN示例

调用匿名函数的MDN示例
EN

Stack Overflow用户
提问于 2015-02-07 23:45:43
回答 2查看 167关注 0票数 1

伙计们,我正在努力理解为什么调用真正的工作,我是新的面向对象的java脚本,这个关键字和函数,如call。

我在网上的一个节目中找到了下面这一行:

代码语言:javascript
复制
this.tabs = [].slice.call( this.el.querySelectorAll( 'nav > ul > li' );

我试着理解了每个函数,并且非常成功,实际上下面的线程帮助了我:

链接

但是,理解调用有点困难,尤其是在查看MDN呼叫医生之后。

我不太理解MDN文档中的这个示例:

使用调用来调用匿名函数:

代码语言:javascript
复制
var animals = [
  { species: 'Lion', name: 'King' },
  { species: 'Whale', name: 'Fail' }
];

for (var i = 0; i < animals.length; i++) {
  (function(i) {
    this.print = function() {
      console.log('#' + i + ' ' + this.species
                  + ': ' + this.name);
    }
    this.print();
  }).call(animals[i], i);
}

现在我理解了对象文字,我理解了for循环,我理解了生命,我理解了this.print();调用的函数,

不过,我不明白的是下面这句话:

代码语言:javascript
复制
call(animals[i], i);

以及传递给它的参数。

致以亲切的问候。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-07 23:48:44

(function () { ... }).call(animals[i], i)使用参数i调用函数(function () { ... }) "on“对象animals[i] (即:在调用范围内,this将是animals[i])。

换句话说,它相当于:

代码语言:javascript
复制
animals[i].f = function () { ... };
animals[i].f(i);

除非不需要设置animals[i].f

票数 1
EN

Stack Overflow用户

发布于 2015-02-07 23:53:56

也许解释它的一个更简单的方法是把它倒下来一点:

代码语言:javascript
复制
 (function(i) {
    this.print = function() {
      console.log('#' + i + ' ' + this.species
                  + ': ' + this.name);
    }
    this.print();
  }).call(animals[i], i);

代码语言:javascript
复制
(function(i) {...}).call(animals[i], i);

这个调用可能被错误地认为是应用于动物,但实际上是应用于已经定义的匿名函数。换句话说,在刚刚创建的匿名函数上调用"call“方法。通过这种方式,该函数被应用到动物身上,而无需显式地定义它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28388891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档