Javascript:在匿名函数中包装代码
如果我将脚本封装在匿名样式的函数中,比如在Coffeescript中编译时,脚本是否适合操作DOMJavascript:在匿名函数中包装代码,javascript,Javascript,如果我将脚本封装在匿名样式的函数中,比如在Coffeescript中编译时,脚本是否适合操作DOM 它有什么好处 这有什么问题 我的代码更安全吗 它不太安全 与命名函数相比,匿名函数的缺点是,在读取代码块时,它只被调用一次(或每个父函数调用一次)。不能用名字来称呼它 与命名函数相比,匿名函数的优点是语法更短 但是如果问题是是否使用这个匿名函数作为包装器,我真的不认为它有什么好处。它只是添加了额外的代码 编辑:如果您的匿名函数稍长一点,并且包含变量,我可以看到避免这些变量名污染全局范围是很有
- 它有什么好处
- 这有什么问题
- 我的代码更安全吗
它不太安全 与命名函数相比,匿名函数的缺点是,在读取代码块时,它只被调用一次(或每个父函数调用一次)。不能用名字来称呼它 与命名函数相比,匿名函数的优点是语法更短 但是如果问题是是否使用这个匿名函数作为包装器,我真的不认为它有什么好处。它只是添加了额外的代码
编辑:如果您的匿名函数稍长一点,并且包含变量,我可以看到避免这些变量名污染全局范围是很有用的。但在你的例子中,情况并非如此。请参阅此答案,了解其对名称空间的用处:.完全合适。这通常被称为一个 好处是:
- 通过“在命名空间下工作”-命名变量并设置范围,可以避免变量命名冲突:
(function ($, DOM, ultraSelector) { $(DOM).find(ultraSelector); // $ is always jQuery })(jQuery, document, 'mySelector'); $ = false; // here $ is not jQuery anymore
- 您的变量在您的范围内进行管理,永远不可能在全局范围内实现;及
- 您可以安全地
,知道只有IIFE中的代码才会受到影响:“严格使用”
(function () { 'use strict'; globalVariable = true; // will throw error var scopedVariable = true; // only accessible inside this IIFE })(); globalVariable = true; // will define a global variable var scopedVariable = true; // is not really scoped, since its scope is global
(function(){}())
(function () {
'use strict';
globalVariable = true; // will throw error
var scopedVariable = true; // only accessible inside this IIFE
})();
globalVariable = true; // will define a global variable
var scopedVariable = true; // is not really scoped, since its scope is global