向外部函数传递参数的自执行函数
Self-Executing function passing arguments to external function
我在javascript中看到了一些结果,同时使用了全局定义的函数和我不理解的自执行匿名函数。这是代码:
var outerFunc = function(obj) {
console.log(obj);
}
(function() {
outerFunc({name: "my object"});
})();
这里的结果是以下内容作为字符串记录到控制台:
function () {
outerFunc({name: "my object"});
}
当然,将"outerFunc"放在另一个函数的作用域内会很好地将对象记录到控制台。
有人能向我解释一下为什么这个功能是这样的吗?我怀疑这与闭包和超出范围的变量有关,但我并不乐观。
您忘记关闭变量语句,这就是无法工作的原因
var outerFunc = function(obj) {
console.log(obj);
}; // semicolon needed
(function() {
outerFunc({name: "my object"});
})();
FIDDLE
分号并不总是可选的,在这种情况下,它被解析为
var outerFunc = function(obj) {
console.log(obj);
}(
function() {
outerFunc({name: "my object"});
}()
);
或更可读的
var outerFunc = function(obj) {
console.log(obj);
}(function_goes_here_passed_as_argument);
因此,它不再是IIFE,而是作为参数传递的函数,在另一端以obj
结束,这就是该函数被记录为字符串的原因。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 为什么不'我们在javascript中使用函数参数的数据类型
- 使用闭包共享构造函数参数
- 函数参数的值错误
- 当一个重要的构造函数参数丢失时应该发生什么
- 阻止ReSharper将JavaScript函数参数放到新行中
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 使构造函数参数具有ES6类方法的特权
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- Windows.Networking.EndpointPair构造函数参数
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 大括号中的Javascript函数参数
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- 将JSON字符串转换为函数参数
- eval()读取函数参数有多糟糕
- Javascript不能在一个命令中使用函数参数
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- ES6类构造函数参数
- 是否可以在javascript函数参数列表中调用多个函数