Javascript 使用函数表达式而不是函数声明的优点?
如图所示,函数声明和函数表达式之间存在一些差异 函数表达式与函数声明相比有一个缺点,如果在声明函数表达式之前调用它,它将给出一个错误 我只想知道使用函数表达式的优点,因为我似乎只看到上面提到的缺点。我可以举个例子 函数表达式:Javascript 使用函数表达式而不是函数声明的优点?,javascript,function,Javascript,Function,如图所示,函数声明和函数表达式之间存在一些差异 函数表达式与函数声明相比有一个缺点,如果在声明函数表达式之前调用它,它将给出一个错误 我只想知道使用函数表达式的优点,因为我似乎只看到上面提到的缺点。我可以举个例子 函数表达式: alert(foo()); // ERROR! foo wasn't loaded yet var foo = function() { return 5; } 功能声明: alert(foo()); // Alerts 5. Declarations are loa
alert(foo()); // ERROR! foo wasn't loaded yet
var foo = function() { return 5; }
功能声明:
alert(foo()); // Alerts 5. Declarations are loaded before any code can run.
function foo() { return 5; }
通常,当您需要在多个位置访问某个函数时,应该随时使用声明的函数 在javascript中,声明函数仅仅是
foo=function(){…}
的语法糖
两者都有各自的用途,在个别情况下都有微妙(难以量化)的优势
一般来说,它的优点是它是一个“一次性”函数。它的存在是为了完成一项单一、快速的工作,而给它单独的声明将是浪费时间和空间。表达式函数所能做的任何事情都是声明函数所不能做的。正如我所说,这很微妙,也很难量化。除此之外,我能看到的唯一优势是动态更改函数调用
例如,此代码:
function foo(){
console.log('foo');
}
function bar(){
console.log('bar');
}
var myFn = foo;
myFn();
setInterval(function(){
if(myFn === foo) myFn = bar;
else myFn = foo;
}, 5000);
setInterval(function(){
myFn()
}, 6000);
function foo(){
console.log('foo');
}
setInterval(function(){
function foo(){
console.log('Changed foo');
}
foo()
}, 5000)
setInterval(function(){
foo()
}, 5000)
它将永远不会记录相同的事情,因为您重新分配了一个全局变量,每个innerscope函数都将更改,而以下代码:
function foo(){
console.log('foo');
}
function bar(){
console.log('bar');
}
var myFn = foo;
myFn();
setInterval(function(){
if(myFn === foo) myFn = bar;
else myFn = foo;
}, 5000);
setInterval(function(){
myFn()
}, 6000);
function foo(){
console.log('foo');
}
setInterval(function(){
function foo(){
console.log('Changed foo');
}
foo()
}, 5000)
setInterval(function(){
foo()
}, 5000)
将记录两个不同的内容。您只能更改当前作用域函数,不能更改全局。我的实验:在不同作用域中使用该函数时需要使用的函数表达式。比如说
function outer(){
function inner(){
}
}
outer();
inner();// Error ...calling inner..will not be found..
-这是行不通的。但是
var inner;
function outer(){
inner=function(){
}
}
outer();
inner();// will work
-这将起作用与“提升”相关的可能的重复。对于函数声明,整个函数被提升。对于函数表达式,只有变量被提升。问题是,这个问题没有很好地表达出来。它更像是开箱即用的视图。在不同的情况下,优点是缺点(同时)。所以问题应该是,在什么情况下……我知道大多数时候我会使用声明函数,但我想知道使用表达式而不是声明函数有什么好处。好处是它是一个“一次性”函数。它的存在是为了完成一项单一、快速的工作,而给它单独的声明将是浪费时间和空间。表达式函数所能做的任何事情都是声明函数所不能做的。就像我说的,这很微妙,很难量化。“在javascript中,声明函数只是foo=function(){…}的语法糖。”不,这不是语法糖。语法上的糖分可以去掉,操作将保持不变,而
foo=function(){}
与function foo(){}
具有不同的语义。也就是说,这就是提升的工作原理——声明总是被提升,这使得代码的行为不同,例如,foo();函数foo(){}
正确。一个更微妙的变化是if(false)函数foo(){}
,尽管if
语句没有执行,它仍然被声明和提升。感谢您提供的xlear可视示例,但是在函数外部内部一次获取内部有什么好处呢。创建一个对象或创建另一个表达式作为函数inner()不是更好吗?我不知道;我不明白你为什么要在现实世界中做第二个例子。这只是一个例子。但是当我们处理javascript闭包时,我们需要这种技术@DanielRamirez Escuderople请通过以下步骤帮助您: