firefox-addon - Firefox 扩展 javascript 模块 : what happens to unexported symbols?

标签 firefox-addon javascript

我刚刚开始使用 javascript 模块(而不是尝试 XPCOM 组件)编写我的第一个 FF 扩展,但我不清楚加载 jsm 时会发生什么。

问:文件范围是否充当非导出符号的闭包,或者未引用的符号只是垃圾收集?

举个例子,一个模块可以/应该这样写吗?

//modules/myModule.js
var EXPORTED_SYMBOLS = [ 'foo', 'bar' ];

var data;

function foo(){
   return data;
}

function bar(newData){
   data = newData;
}

将其导入其他地方:

var aNS = {};
Components.utils.import("resource://myext/myModule.js", aNS);
aNS.bar('it works?');
alert(aNS.foo()); //alert: 'it works?'

即使模块可以这样写,是否有充分的理由不这样做?

最佳答案

它以闭包方式运行,但前提是您在某处引用它。在我的扩展中,我有类似的东西:

var EXPORTED_SYMBOLS = ['foo'];
let cacheService = Components.classes["@mozilla.org/network/cache-service;1"]
                    .getService(Components.interfaces.nsICacheService);
let foo = {
   svc : cacheService,
   dosomethingwithit : function(){this.svc.somemethod();}
}

因为它被 foo.svc 引用,所以我的 cacheService 运行良好。如果我没有在任何地方引用它,它就会被垃圾收集 - 这并不奇怪,因为如果它不被使用谁在乎。

但现在仔细想想,我只是在想我为什么这样做。没有多大意义,或区别。我本可以有类似的东西:

var EXPORTED_SYMBOLS = ['foo'];

function something(){
    this.svc = Components.classes["@mozilla.org/network/cache-service;1"]
                    .getService(Components.interfaces.nsICacheService);
}
let foo = new something();

我想我只是更喜欢第一种方法的外观。

关于firefox-addon - Firefox 扩展 javascript 模块 : what happens to unexported symbols?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5138660/

相关文章:

c# - 共享正则表达式(C# 到 JS)- 始终为 false - 这里有什么问题?

javascript - 为什么我的 angularJS 错误在 Firefox 控制台和 Firebug 中显示如下?

javascript - Firefox 插件将计算列出的 url 的点击次数

javascript - jQuery select2 的选择值未正确更新

javascript - 如何设置事件的 EventTarget

php - 如何将基于 javascript 的能力测试传递给服务器,并让服务器根据测试结果发送标记

javascript - 如何从 SDK 插件数据文件夹加载 dll?

firefox - 如何使用addon SDK调用Firefox printpreview

google-chrome-extension - 在 ManifestV3 Service Worker 后台脚本中使用 `window` 全局变量

Javascript 如何计算一系列商品的总价?