我正在考虑围绕Firebase身份验证的JSFiddle中的一些代码
http://jsfiddle.net/firebase/a221m6pb/
但有一些事情我不太关注代码...... 在顶部声明的函数
(function (jQuery, Firebase, Path) {
这是将服务/库注入jsfiddle的某种方式吗?还没有看过像之前的例子......还有谁能告诉我这个方法签名中的路径是什么?...我理解它在路由中的用途这个例子,但我不完全确定它是什么..是它的某种路由框架...道歉,如果这些是显而易见的问题,我相对较新的jsfiddle + javascript
答案 0 :(得分:2)
这称为立即调用函数表达式(IIFE),它们是参数(jQuery,Firebase,Path),它们在调用结束时发送:
}(window.jQuery, window.Firebase, window.Path))
有关立即调用的函数的更多信息,请查看以下链接
http://benalman.com/news/2010/11/immediately-invoked-function-expression/
答案 1 :(得分:2)
在底部,您可以看到传递给这些参数的内容。
(window.jQuery, window.Firebase, window.Path)
这只是确保这些变量引用所需范围内的正确对象的一种方法。
是的,Path
用于路由。环顾行~300,你会看到。
有很多评论&注释,你应该继续阅读脚本。
旁注,这与JSFiddle没有任何关系。 JSFiddle只是一个代码编辑器平台,有很多很多很喜欢它:JSBin,CodePen,WebDevOut,Plunker - 列表继续。
就您的意见扩展此答案。如果单击左侧的外部资源选项卡,则会获得已添加到环境中的所有脚本和资源的列表。大多数情况下,脚本会在全局对象上创建某种 namespace 对象 - 在浏览器中,全局对象为window
- 所以你最终得到window.jQuery
,window.Path
,window.Firebase
等。由于每个作用域都可以访问全局作用域,因此通常只会看到jQuery
(或$
)在函数内部自由使用,因为它假设全局引用不会改变 - 但如果是?如果另一个库或工具在程序中间写入该命名空间该怎么办?这会破坏你所有的参考资料!
将window.jQuery
传递给名为jQuery
的参数的函数的全部要点是确保在该函数的范围内jQuery
始终表示您认为它应该是什么,因为全局引用(window.jQuery
)可能在不知不觉中由其他库写入。您并不关心命名空间是否已经或现在可以写入,因为您已经建立了对该原始对象的引用。
此库提供Path
对象:pathjs
进一步阅读:
答案 2 :(得分:2)
这是一个立即调用的匿名函数。参数在函数末尾设置。这是一个非常简单的例子:
(function(a, b, c) {
// a = 1, b = 2, c = 3
})(1, 2, 3);
这用于避免填充全局命名空间/以避免暴露函数/参数。
在该jsfiddle页面上,如果您转到侧栏并单击“外部资源”,您将看到参数的来源。