有没有办法避免将 javascript 封装在括号中但仍能获得好处?
Is there a way to avoid encapsulating javascript in parenthesis yet still get the benefits?
最近,我注意到 javascript 惯例发生了变化。现在,无论我在哪里看,我都会看到其他使用 javascript 的开发人员将他们的函数包装在括号中以使其成为私有的(或者类似的东西,我不确定,javascript 对我来说是第二语言)。例如...
(function something()
{ // something happens here
})();
随着内容(尤其是附加功能)的嵌套,这会损害代码的可读性,并且确实使 javascript 变得丑陋并且看起来越来越像 LISP 编程的噩梦(它如何获得昵称“Lots”愚蠢的单括号)。我不在乎我是否必须输入一个完整的单词(甚至几个单词)来获得相同的效果。是否有更好的替代方法来封装在括号中以使函数私有并获得括号封装的其他好处?
编辑:显然我误解了我质疑的外部括号的意义。实际上,这让我对他们的目的更加困惑。
- 你可以定义正则函数,需要的时候调用
例子
var myObject = {
something: function() {
},
somethingElse: function() {
}
};
myObject.something();
ES6/ES2015 现在有模块支持
//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
//------ main.js ------
import { square, diag } from 'lib';
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5
您可以阅读有关模块的更多信息here
没有。 (Delta ES6 模块,或其他预打包 require-like 框架。)
唯一需要这种语法的情况是你有一个 IIFE,而且它只有两个额外的括号(将函数转换为可以计算的表达式,即执行)。
您也可以只定义函数并稍后执行它,例如,完全避免 IIFE)。
最近,我注意到 javascript 惯例发生了变化。现在,无论我在哪里看,我都会看到其他使用 javascript 的开发人员将他们的函数包装在括号中以使其成为私有的(或者类似的东西,我不确定,javascript 对我来说是第二语言)。例如...
(function something()
{ // something happens here
})();
随着内容(尤其是附加功能)的嵌套,这会损害代码的可读性,并且确实使 javascript 变得丑陋并且看起来越来越像 LISP 编程的噩梦(它如何获得昵称“Lots”愚蠢的单括号)。我不在乎我是否必须输入一个完整的单词(甚至几个单词)来获得相同的效果。是否有更好的替代方法来封装在括号中以使函数私有并获得括号封装的其他好处?
编辑:显然我误解了我质疑的外部括号的意义。实际上,这让我对他们的目的更加困惑。
- 你可以定义正则函数,需要的时候调用
例子
var myObject = {
something: function() {
},
somethingElse: function() {
}
};
myObject.something();
ES6/ES2015 现在有模块支持
//------ lib.js ------ export const sqrt = Math.sqrt; export function square(x) { return x * x; } export function diag(x, y) { return sqrt(square(x) + square(y)); } //------ main.js ------ import { square, diag } from 'lib'; console.log(square(11)); // 121 console.log(diag(4, 3)); // 5
您可以阅读有关模块的更多信息here
没有。 (Delta ES6 模块,或其他预打包 require-like 框架。)
唯一需要这种语法的情况是你有一个 IIFE,而且它只有两个额外的括号(将函数转换为可以计算的表达式,即执行)。
您也可以只定义函数并稍后执行它,例如,完全避免 IIFE)。