如何在不修改全局范围的情况下执行某些javascript
How to execute some javascript without modifying the global scope?
我想调用一些javascript代码,这些代码出于自身目的需要定义一些变量,但我想隔离它,这样它就不会污染全局范围。所以我把所有东西都包装在一个匿名函数对象中,立即调用它,并且不把它或结果分配给任何东西:
function() {
var myInnerHelperFunction = function(object) {
//do some work
};
var anObject = ...;
myInnerHelperFunction(anObject);
}();
但我得到了一个语法错误:SyntaxError: Unexpected token (
您不能调用函数声明。你需要把它变成一个表达式。实现这一点最常见的技术是将函数封装在括号中:
(function() {
var myInnerHelperFunction = function(object) {
//do some work
};
var anObject = ...;
myInnerHelperFunction(anObject);
}());
但是,请注意,任何一元运算符也会起作用(任何导致构造被解析为表达式而不是声明的操作):
~function example() {
console.log("example");
}();
为了进一步扩展,您的代码实际上抛出了一个语法错误,因为您的函数缺少一个标识符。"程序"只能包含语句和函数声明。因此,必须将代码解析为函数声明。函数声明必须具有标识符。你的没有,所以你的程序无效。
当您将圆括号括在函数周围时,解析树是不同的。括号被解析为"表达式语句",其中可以包含一个表达式。由于函数可以解析为表达式或声明,这取决于它们出现的上下文,因此这是合法的,并且函数被解析为表达式。由于函数表达式可以立即调用,所以这是可行的。
相关文章:
- 如何在不使用Internet Explorer的情况下从未挂起的HTML文件执行程序
- 如何在不使用javascript执行的情况下为函数分配参数
- 如何停止两个按钮执行相同的工作?在这种情况下,它们都会滚动到顶部
- 在不使用隔离作用域的情况下执行函数的角度指令
- 在 gruntjs 构建失败的情况下强制执行某些任务
- 在不执行ajax请求的情况下,使用jQuery读取HTTP标头以检查404
- Angular在不触发摘要的情况下执行XHR请求
- 函数在我的情况下无法执行
- 如何在不使浏览器滞后的情况下暂停Javascript的执行
- Phonegap onclick在不单击的情况下执行
- 如何在不冻结浏览器的情况下执行大量javascript代码
- 使用node.js模块,在什么情况下模块会被执行两次
- 如何在不选择模式配置参数的情况下,使用mongoose在MongoDB模式实例化中的关联数组/对象中执行foreach
- button.click仅在前面有警告的情况下执行
- 如何在不打开新窗口的情况下在单页应用中执行 Dropbox 身份验证
- 在没有javascript循环的情况下多次执行命令
- 如何在不刷新页面的情况下多次执行构造函数
- Node 的断言模块是否提供了一种在没有强制的情况下执行深度相等检查的方法?
- 使用 V8 JavaScript 引擎在没有 Web 视图的情况下执行 JS 库
- 如何在没有物理感谢页面的情况下执行谷歌Adwords转化跟踪