首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我可以向这个JS传递一个语句,而不能传递一个函数?

为什么我可以向这个JS传递一个语句,而不能传递一个函数?
EN

Stack Overflow用户
提问于 2014-03-06 13:09:07
回答 3查看 43关注 0票数 0

我知道在JS中可以使用函数作为参数。

当我将alert("d")语句作为参数传递时--一切都会触发。

代码语言:javascript
运行
复制
 dc.embed.load('http://www.documentcloud.org/search/embed/', {some json
    }, alert("d"));

但是当我传递一个完整的on函数时--该语句就不会触发。

代码语言:javascript
运行
复制
 dc.embed.load('http://www.documentcloud.org/search/embed/', {some json
    }, function() {
    alert("d");
});

为什么可能会触发警报--但匿名函数不会触发?

EN

回答 3

Stack Overflow用户

发布于 2014-03-06 13:13:43

在第一种情况下,调用alert("d")并将其结果undefined作为第三个参数传递给函数。因此,警报甚至在调用load函数之前就会运行。在第二种情况下,第三个参数是一个实际的函数,如果它被调用,它将执行警报。它看起来好像从未被调用过。您需要调查dc.embed.load函数的行为,并查看它如何以及何时调用您作为第三个参数传递的函数。

票数 5
EN

Stack Overflow用户

发布于 2014-03-06 13:14:34

在第一种情况下,你正在调用函数,在第二种情况下,你正在传递一个函数体,但它并没有被调用。

票数 2
EN

Stack Overflow用户

发布于 2014-03-06 13:17:25

您根本没有调用第二个方法中的函数。我认为这第三个变体可能会帮助你更好地理解它,以及Scott的答案:

代码语言:javascript
运行
复制
dc.embed.load('http://www.documentcloud.org/search/embed/', {some json
    }, function() {
        alert("d");
    }() // <- note the () here
);

只发送一个函数与执行以下操作类似:

代码语言:javascript
运行
复制
dc.embed.load('http://www.documentcloud.org/search/embed/', {some json
}, alert
);

所以我在这里的第一个例子(某种程度上)与你的第一个例子相匹配,因为函数是被调用的,而不仅仅是传递它。另外,我的第二个示例与您的第二个示例相匹配,因为我们只是将函数体作为参数传入。

要在最简单的示例中理解它的工作原理,请比较以下情况下变量的值:

代码语言:javascript
运行
复制
var a = alert;
var a = alert('hey');

他们尝试这样做,例如:

代码语言:javascript
运行
复制
a('hello there'); // for both cases
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22215524

复制
相关文章

相似问题

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