为什么我不能引用我的匿名函数
Why can't I reference my anonymous function?
我有以下js(内容概率不重要)
(function() {
var module = {
getAppAbsoluteUrl: getAppAbsoluteUrl,
getAppRelativeUrl: getAppRelativeUrl,
getAppODataApiUrl: getAppODataApiUrl
};
return module;
function getAppAbsoluteUrl() {
return _spPageContextInfo.webAbsoluteUrl;
};
function getAppRelativeUrl() {
return _spPageContextInfo.webServerRelativeUrl;
};
function getAppODataApiUrl() {
return getAppAbsoluteUrl() + "/_api";
};
});
如果上面的代码在一个名为spAppUtils的文件中.js并且在另一个html页面中,我尝试调用它,我会收到一条未定义的消息。 以上不是匿名函数吗? 如何从另一个页面初始化此函数? 我尝试只是引用 js 无济于事。 我错过了什么?
谢谢
尝试做这样的事情:
var module = (function() {
// move your functions before your return
// hoisting (http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html) will allow you to add them after the return, but doesn't help readability and will likely confuse newcomers
function getAppAbsoluteUrl() {
return _spPageContextInfo.webAbsoluteUrl;
};
function getAppRelativeUrl() {
return _spPageContextInfo.webServerRelativeUrl;
};
function getAppODataApiUrl() {
return getAppAbsoluteUrl() + "/_api";
};
return { // explicitly export your public interface
getAppAbsoluteUrl: getAppAbsoluteUrl,
getAppRelativeUrl: getAppRelativeUrl,
getAppODataApiUrl: getAppODataApiUrl,
test: function () { alert('test') }
};
}()); // execute your anonymous function
module.test()
小提琴
要调用该函数,您需要在它后面放置()
。
要捕获返回值(您分配给函数内部module
然后返回的对象),您需要在它之前使用赋值运算符。
您可以去掉整个函数周围的括号。它们只需要将函数声明转换为函数语句,以便您可以立即调用它,但是拥有一个=
(您需要)也可以做到这一点。
var myModule = function() {
// ...
}();
这里有几个问题。首先,在定义所有内容之前返回函数是危险的。有一种叫做变量提升的东西会自动将所有声明移动到顶部,但我不确定它何时适用。
下面是无法访问的代码的基本示例。
(function(){
console.log("gets called");
return;
console.log("unreachable code");
})();
下一个问题是范围问题。
// window scope
(function(){
// new scope
var module = {"hello":"world"};
console.log(module); // object
})();
console.log(module) // undefined
[编辑] 因此,为了使您的模块可供其他脚本文件访问,您必须在窗口范围内为其定义一个全局变量。
(function(){
window.module = {...}
})();
您可以尝试使用<script>
标签将其直接插入到html中,以查看问题是函数本身还是指向.js文件的链接
相关文章:
- 可以Resharper在我的javascript函数声明中添加分号
- 为什么我的JavaScript堆栈排序函数不起作用
- 加速我的复杂函数绘图仪(canvas+javascript)
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 使用JAVASCRIPT转换货币.可以't通过我的函数设置转换后的输入文本字段的值
- 为什么我的控制器没有启动函数.js脚本
- 为什么我的函数没有被调用呢
- 由于某种原因,我的JavaScript函数无法工作
- 我需要一个jQuery函数来只工作在700px以上的屏幕大小,无法在我的代码中发现错误
- 我应该如何声明我的自调用函数
- 为什么我的函数没有返回准确的计数
- 为什么我的回调函数没有运行
- 为什么我的jQuery点击函数没有触发
- 我的函数返回“未定义”
- 为什么我的JavaScript函数没有返回选中的数组值
- 用我的函数jquery给出数据/参数
- 为什么我的javascript地理编码函数返回空白结果
- 从未达到我的函数调用-ReactJs 0.12.0
- 我的函数不会返回要保存在数组中的对象
- 我的徽章;如果“;为什么没有调用关联的函数