Javascript JS:what';函数和方法在函数表达式上的区别是什么?
最近我一直在学习JS模块模式,我已经看到了至少3-4种创建具有公共和私有属性的函数表达式的方法。我的问题是我不明白它们之间的最大区别是什么,最佳方法/最佳实践是什么 下面4个示例的语法不同,但它们的调用方式相同。你能解释一下他们之间的区别吗 示例A-我声明函数func(),只返回方法/函数名Javascript JS:what';函数和方法在函数表达式上的区别是什么?,javascript,methods,dry,module-pattern,Javascript,Methods,Dry,Module Pattern,最近我一直在学习JS模块模式,我已经看到了至少3-4种创建具有公共和私有属性的函数表达式的方法。我的问题是我不明白它们之间的最大区别是什么,最佳方法/最佳实践是什么 下面4个示例的语法不同,但它们的调用方式相同。你能解释一下他们之间的区别吗 示例A-我声明函数func(),只返回方法/函数名 var funcA = function() { var hi = "hello"; function bye() { return 'bye'; } f
var funcA = function() {
var hi = "hello";
function bye() {
return 'bye';
}
function hello() {
return hi;
}
return {
hello: hello
}
}();
var funcB = function() {
var hi = "hello";
var bye = function() {
return 'bye';
}
var hello = function() {
return hi;
}
return {
hello: hello
}
}();
示例B—这里我声明foo=function(),只返回方法/函数名
var funcA = function() {
var hi = "hello";
function bye() {
return 'bye';
}
function hello() {
return hi;
}
return {
hello: hello
}
}();
var funcB = function() {
var hi = "hello";
var bye = function() {
return 'bye';
}
var hello = function() {
return hi;
}
return {
hello: hello
}
}();
示例C-这里我在返回中声明foo=function()
var funcC = function() {
var hi = "hello";
var bye = function() {
return 'bye';
}
return {
hello: function() {
return hi;
}
}
}();
示例D-与prev相同,但所有函数都包装在()
中
在每种情况下,如果我想调用hello(),我只需编写funcX.hello()
,它们都返回“hello”
但它们都是通过不同的方式创造出来的。正确的是什么?如果有正确的方法
谢谢。首先值得注意的是,在
bye
和hello
中省略var关键字实际上会使它们具有全局性
现在,我们来看看两者之间的区别:
var hello = function () {}
return {
hello: hello
};
及
是none,因为您只是以任意方式传递函数。将函数存储在变量中有一个优点,即可以在范围中的其他位置使用它
现在需要注意的一个区别是声明函数
var myFunc = function () {}
vs
带有关键字infront的会立即进入范围,因此在您到达声明之前,它们是可用的。对于var,情况并非如此。比如说
function a() {
b();
}
a();
var b = function () {
console.log('hi')
}
调用a时,它将抛出一个错误,因为未定义b。如果你这样做:
function a() {
b();
}
a();
function b() {
console.log('hi')
}
它会很好用的。这就是所谓的吊装。第一个被称为函数表达式
var thing=function(){}
,其中最后一个被称为函数声明function thing(){}
bye
没有声明,所以它是全局的。它们之间没有太大的区别,在一些示例中,您没有使用var
来声明bye
和hello
,因此它们成为全局变量。如果你修正了这一点,它们在所有意图和目的上都是等价的。示例中缺少var。值得注意的是,JavaScript中没有“方法”,只有作为对象属性的函数。它不像Java中那样有特殊的地位,它是另一个属性,它的值是一个函数。如果您关心性能,请对其进行基准测试。不,你不会注意到任何明显的区别。谢谢你的解释。我唯一关心的是最佳实践/性能,按照您所说的,没有问题。我通常遵循funcA()结构,所以我认为我做得对:)老实说,这取决于偏好。我发现,在我参与的各种项目上,以及在不同的公司之间,情况都有所不同。一旦你开始接触到更多新奇的东西,看看你的编辑器中可能包含的内容。这不是一个官方标准,但我们已经尝试在工作中采用它来保持事情的一致性。
function a() {
b();
}
a();
function b() {
console.log('hi')
}