为啥我应该将函数分配给 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 中的变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将函数分配给 Javascript 对象的属性?

将多个用逗号分隔的整数分配给 C 中的 int - 为啥会这样?做啥的? [复制]

将递归函数分配给python中的变量

将函数分配给R中的变量

将 Lambda 函数分配给 serverless.yml 中的特定 VPC ID

将类的成员函数分配给 C++ 中的函数指针