为啥我应该将函数分配给 javascript 中的变量? [复制]
Posted
技术标签:
【中文标题】为啥我应该将函数分配给 javascript 中的变量? [复制]【英文标题】:Why should I assign a function to a variable in javascript? [duplicate]为什么我应该将函数分配给 javascript 中的变量? [复制] 【发布时间】:2012-09-03 15:38:45 【问题描述】:可能重复:javascript: var functionName = function() vs function functionName() What is the difference between a function expression vs declaration in Javascript?
我正在尝试了解 javascript 的“最佳实践”。
此代码来自jqfundementals.com
// create a function that will greet a person,
// and assign the function to the `greet` variable
var greet = function( person, message )
var greeting = 'Hello, ' + person + '!';
log( greeting + ' ' + message );
;
greet( 'Jory', 'Welcome to JavaScript' );
greet( 'Rebecca', 'Thanks for joining us' );
为什么要将函数分配给 greet 变量?
我的第一个冲动就是这样写:
function greet ( person, message )
var greeting = 'Hello, ' + person + '!';
log( greeting + ' ' + message );
;
这两种实现有什么区别?
【问题讨论】:
我感觉以前有人问过这个问题。 非常好,感谢@Quentin 提供链接 虽然这些链接回答了肤浅的问题,但我相信它没有回答“为什么要这样做”的一面,因此不应将其视为重复。 @NathanKoop 你同意吗? 我觉得它们涵盖了相同的领域,也许可以对这些问题的答案进行一些编辑以添加why
。
【参考方案1】:
这些sn-ps之间没有任何区别,除了提升允许您在定义之前之前行中调用前一个函数。但这只是一个让你热身的简单例子。实际上,人们不会将这些函数分配给变量,而是将它们直接传递给其他函数。或者他们以其他方式在表达式上下文中使用它们。或者他们动态地决定要存储哪个函数。或者其他任何东西。
【讨论】:
【参考方案2】:没有真正的区别,但var
表单使您可以在使用前声明,以防您有递归函数。
简单示例:
var func1, func2;
func1 = function (count)
count = count - 2;
if (count > 0)
func2(count);
func2 = function (count)
func1(count + 1);
func1(10);
虽然
function func1 (count)
count = count - 2;
if (count > 0)
func2(count);
function func2 (count)
func1(count + 1);
func1(10);
也完全可以接受。由于变量提升,解释器将用前者替换它。
【讨论】:
这是不正确的。对于声明为function name ..
的函数语句(不同于函数表达式),name
具有相同的范围和var name
变量的提升。跨度>
函数声明会被提升,如果一个函数在另一个函数中被调用,它会在运行时而不是解析时被查找——所以推理是双重错误的。
在 JavaScript 中不强制使用前声明,而是应用变量提升。你的论点是什么?
这个论点是关于这篇文章中使用的语言“var form allows you to declare-before-use”好吧,不,不是真的。与其他“完全可接受”的形式相比,它不“允许”这种方式。增加误导的是var
的放置有一些影响的想法..
修复了语言。此外,从他发布的示例代码来看,我怀疑是否需要深入回答。出于所有意图和目的,这些形式是等效的。以上是关于为啥我应该将函数分配给 javascript 中的变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
将多个用逗号分隔的整数分配给 C 中的 int - 为啥会这样?做啥的? [复制]