JavaScript-What'匿名函数和普通代码之间的区别是什么
JavaScript - What's the difference between an anonymous function and just regular code?
我想知道这两者之间有什么区别:
(function(msg) {
alert(msg);
}('Hi'));
这个:
alert('Hi');
因为当你使用匿名函数时,你不能运行它两次,对吧?你不能这样做:
(function(msg) {
alert(msg);
}('Hi')('Goodbye'));
那么,匿名函数有什么意义呢?
此:
(function(msg) {
alert(msg);
}('Hi'));
得到与以下相同的输出:
alert('Hi');
有人能告诉我有什么不同吗?
主要区别在于它有自己的作用域。示例:
(function(msg) {
var x = msg; // local variable in the scope
alert(x);
}('Hi'));
// the variable x doesn't exist out here
例如,当您在作用域中创建一个函数,并在外部公开它时,这很有用。即使在作用域之外执行,函数仍然可以访问作用域。这样,函数就可以保持状态,而不会全局暴露状态:
var f = (function(msg) {
var cnt = 1;
return function(){
alert(msg + ' ' + cnt);
cnt++;
};
}('Hi'));
f(); // shows "Hi 1"
f(); // shows "Hi 2"
您的示例显示了一个自执行的匿名函数。自执行函数关闭作用域,因此您可以执行以下操作:
var count = (function(){
var c = 0;
return function(){
return c++;
}
})();
console.log(count()); console.log(count());
在您的第一个示例中,不会出现任何不同。一个匿名函数,只是没有名字,所以这个:
document.getElementById('whatever').addEventListener('click', function(){alert('wow')});
和
function wow(){
alert('wow');
}
document.getElementById('whatever').addEventListener('click', wow);
做同样的事情。
当您声明一个没有名称的函数时,即
function(){
...
}
你的例子是一个中间函数,在这里你可以隐藏属性和功能(使用闭包,这很复杂,我建议你JS Ninja的秘密,但这是一本中级lvl书。),所以你可以在使用模块模式时使用它:
(function(msg) {
alert(msg);
}('Hi'));
顺便说一句,这是一个关于JS中模式的好资源:http://addyosmani.com/resources/essentialjsdesignpatterns/book/
相关文章:
- 如何在城市和州代码之间用逗号将城市和州从短划线格式化为空格.(javascript)
- 在D3插件sankey.js和html代码之间定义源代码
- 插件和现有jquery代码之间的冲突
- JavaScript-What'匿名函数和普通代码之间的区别是什么
- 两个代码之间的区别是什么(javascript的循环)
- 以下 2 段代码之间是否有实际区别
- JavaScript和GWT代码之间的通信
- Android应用程序和Javascript代码之间的舍入差异
- 以下两个javascript代码之间有什么区别
- 有没有什么技巧可以在格式化/缩小的CSS、JS代码之间自动往返
- 什么'解析Javascript和解析云代码之间的区别
- 元素的总和,代码之间的差异
- 有人能解释一下这两个代码之间的区别吗?为什么第二个有效,而第一个无效;t
- 如何添加jquery字数统计和限制在php代码之间
- 如何在html5/js代码和Windows Phone 8本地代码之间进行交互
- 我的JS代码之间的区别是什么?
- 我如何在剃刀视图中编写服务器端代码之间的JavaScript
- 内联Javascript代码和纯Javascript代码之间的最佳性能是什么?
- Javascript和服务器端代码之间存在重复的常量
- 如何在此 jQuery 代码之间添加和删除类