What is the significance of this function definition?
我理解如何定义这样的函数:
1 2 3 | function myfunc(x,y,z) { alert("Just an example" + x + y + z) } |
但不是这个:
1 2 3 4 5 6 7 | <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> (function ($) { $.fn.idle = function (x, y, z) { alert("Just an example" + x + y + z) }(jQuery)); |
以上是我正在使用的库的一部分,但我根本无法理解
它在做什么? 它以某种方式定义了一个名为"idle"的函数,但是
底部的
一个立即调用的函数表达式,它在其作用域内将
1 | (function($) {}(jQuery)); |
它立即创建并执行一个函数。这样,无论全局
至于问题的其他部分,
1 2 | $.fn.doSomething = function(){}; //add a method to the jQuery prototype $('selector').doSomething(); //then you may call it on any jQuery object |
有关jQuery插件创作的更多信息。
这是为变量赋一个函数:
1 2 | var test = function () { alert('testing'); } test(); // will alert testing |
分配给变量的函数也称为"匿名函数",因为它没有名称,通常用于将函数作为参数传递给另一个函数。
在javascript中,变量可以以
所以
1 2 3 4 5 | $ = { fn: { idle: function () {} } }; |
这也被称为"命名空间",尽管它也有其他细微差别。
另请注意,您只能为现有对象分配属性:
1 2 3 4 5 | var myVar = {}; myVar.test.foo = {}; // results in error because myVar.test is undefined myVar.test = { foo: {} }; // this is correct |
向
1 2 | $.fn.alertTitle = function() { alert( $(this).attr('title') ); }; $('#foo').alertTitle(); |
这被称为IIFE - 立即调用函数表达式。
1 2 3 | (function ($) { // inside stuff }(jQuery)); |
1 2 3 4 5 | // inside stuff $.fn.idle = function (x, y, z) { alert("Just an example" + x + y + z) } // added in missing parentheses |
另一个有趣的观点是,
这里有很多别名使代码比实际更复杂。
这是一个常见的结构,您可以看到将插件/ mixins添加到库中。
希望,我能为你做好准备。