为什么我需要使用函数作为参数,并且可以'不要只使用它返回的值
Why do I need to use function as an argument and can't just use the value it returns
我是jQuery的新手,我正在浏览一个关于DOM更改的教程。
下面是教程中的一个例子。
HTML部分:
<h1>My Awesome Post</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod</p>
编写脚本
(function() {
$('p').eq(0).after(function() {
return $(this).prev();
});
})();
我不明白为什么我需要使用这里的函数,如果它所做的只是返回一个值?为什么以下语句不起作用?
$('p').eq(0).after( $(this).prev());
这一切都与范围和this
的值有关
在第一个例子中,函数创建了一个新的范围,就像所有函数一样,其中this
是当前迭代的元素,因为jQuery在内部迭代元素集合,并相应地设置this
的值
$('p').eq(0).after(function() { // new scope, where "this" is the element
return $(this).prev();
});
在第二个代码中,没有设置特殊的作用域,因此作用域是代码所在的任何作用域,很可能是窗口作用域,或者如果它在$(document).ready
作用域中,this
将是文档
$('p').eq(0).after( $(this).prev()); // there is no scope here
您可以在MDN 上阅读更多关于函数和函数范围的信息
以下内容:
function() {
return $(this).prev();
"this"指的是它找到的元素,而在你的尝试中它没有找到。
如果你想缩短它,你可以试试
$('p').eq(0).after($(this).prev());
这是因为第二个版本中的this
可能会返回Window对象。在不同的点上用console.log(this)
进行实验,以了解它的含义是如何变化的。这样的东西也会产生你所期望的结果:
var b = $('p').eq(0).prev();
$('p').eq(0).after(b);
相关文章:
- 使用返回函数sinde.attr()jquery元素
- 从自执行函数返回函数的Javascript性能命中率
- Node Express Handlebars帮助程序未返回函数的结果
- 未在Firefox中执行PageMethod的返回函数
- 对返回函数的函数感到困惑
- 从承诺返回不返回函数会导致警告
- 从函数返回函数而不调用返回的函数
- Javascript,闭包中的返回函数如何与外部函数连接
- 为什么Coderbyte.com's的Javascript模板喜欢返回函数的原始参数
- 对象函数返回函数而不是值
- 从外部函数(数组)了解返回函数(x)
- 从Javascript类对象返回函数
- 调用Typescript setter don't返回函数,尽管关联的getter可以工作
- 使用依赖注入在 JavaScript 中返回函数
- 通过单击JSP和javascript加载两个返回函数
- 需要说明:无法理解返回函数的javascript
- 简单的onClick返回函数不起作用
- 为什么这个闭包返回函数
- JS函数返回函数供以后使用-未定义参数
- Coffeescription类中的方法返回函数而不是字符串