我正在查看backbone.js截屏视频中的优秀peepcode演示代码.在其中,骨干代码全部包含在传递jQuery对象的匿名函数中:
(function($) {
// Backbone code in here
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
在我自己的骨干代码中,我只是将我的所有代码都包装在jQuery DOM'ready'事件中:
$(function(){
// Backbone code in here
});
Run Code Online (Sandbox Code Playgroud)
第一种方法的优点是什么?这样做会创建一个匿名函数,然后立即执行jQuery对象作为函数参数传递,有效地确保$是jQuery对象.这是唯一的一点 - 保证jQuery绑定到'$'还是有其他理由这样做?
我经常看到以下代码:
(function () {
// init part
})();
Run Code Online (Sandbox Code Playgroud)
但我永远无法理解它是如何运作的.我发现最后一个括号特别令人困惑.有人可以解释它在执行上下文(EC)和变量对象(VO)方面的工作原理吗?
为什么要像这样编写代码Jquery?
(function ($) {
$(function () {
.......
});
})(jQuery);
Run Code Online (Sandbox Code Playgroud) 在我听说自我执行函数之前,我总是习惯这样做:
$(document).ready(function() {
doSomething();
});
function doSomething()
{
// blah
}
Run Code Online (Sandbox Code Playgroud)
自执行功能会产生相同的效果吗?它会在dom上运行吗?
(function doSomething($) {
// blah
})(jQuery);
Run Code Online (Sandbox Code Playgroud) 我读过的(function(){})();是立即调用,不需要调用.并$(function());立即被召唤.
$(function());?$(function());文档被完全加载后?我想问一下页面加载后如何使用这两种功能
jQuery(document).ready(function($)
{
$('#list').tableScroll({height:500});
});
Run Code Online (Sandbox Code Playgroud)
和
jQuery(document).ready(function($)
{
$('#list').tableSorter();
});
Run Code Online (Sandbox Code Playgroud) 我试图给我的jQuery更多一个具有基本对象文字模式的结构,并遇到调用我的自定义move函数的问题,如下所示.
(function() {
var movingMenu = {
menu: $('.nav').children('li'),
move: function() {
menu.each(function() {
$(this).animate({
top: '+=50'
}, 200);
});
}
};
})();
window.setInterval(function(){
movingMenu.move();
}, 1000);
Run Code Online (Sandbox Code Playgroud)
我试图每秒调用此函数,但调用部分本身似乎不起作用.我怀疑变量movingMenu可能超出了范围,在window.setInterval它内部没有线索这个函数属于哪个对象?
演示可用JSFiddle