![](/img/trans.png)
[英]Hello Analytics Reporting API v4; JavaScript quickstart for web applications
[英]Javascript Library Quickstart
我正在尝试构建一个Javascript库,它将为我正在整理的JQuery插件提供一些功能。
我从在线搜索得到了以下骨架代码,虽然我不太确定它是如何工作的(我知道它是一个闭包)。 我通过声明添加了我的函数。
(function(window, document, $) {
function func_1(){
return 1;
}
function func_2(){
return 2;
}
})(window, document, jQuery);
所以我将上面的代码放在一个单独的JS文件中然后在我的HTML页面中获取它,然后我运行尝试运行这样的函数(注意:我也设置了JQuery):
<script type="text/javascript">
$(document).ready(function() {
console.log(func_1());
});
</script>
但是,我似乎在Firebug中遇到了一些错误( ReferenceError: func_1 is not defined
)。
我有两个问题:
className.functionName()
。 如何重构骨架代码以使我能够这样做,比如调用我的函数: Device.func_1()
? 感谢您的预期帮助。
闭包用于隐藏其余代码的内部函数。 您需要显式公开库的公共函数:
var Device = (function(window, document, $) {
function func_1(){
return 1;
}
function func_2(){
return 2;
}
var internalDevice = {
func_1: func_1,
func_2: func_2
};
return internalDevice; // expose functionality to the rest of the code
})(window, document, jQuery);
(function(window, document, $) {})(window, document, jQuery);
part被称为立即调用的函数表达式(IIFE)。 它用于避免将所有库函数泄漏到全局范围。 否则,如果某个其他库具有func_1
函数,它将被覆盖或覆盖库的func_1
。
该函数的参数用于控制库如何影响代码的其他部分并依赖于它。 例如,有人可能会覆盖窗口。$ library,以便$代码中的所有地方都不再可用。 但是由于你在闭包中有一个本地引用,你仍然可以访问它。
或者使用上面的代码 - 返回一个对象 - 您也可以将库直接分配给全局范围:
(function(window, document, $) {
...
window.Device = internalDevice; // expose functionality to the rest of the code
})(window, document, jQuery);
我只能回答第二个问题,但你可以通过这样做来创建:
var Device = {
function func_1()
{
// your first function
},
function func_2()
{
// your second function
}
};
那样你就可以打电话:
Device.func_1();
跳帮助:)
当某个东西在一个闭包里面时,它的范围就变成了那个闭包。 func_1
和func_2
只能在调用它们的匿名函数内部及其下方看到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.