【问题标题】:Javascript function overloading and use strict modeJavascript函数重载和使用严格模式
【发布时间】:2020-03-04 18:30:27
【问题描述】:

我有一个关于 javascript 的问题,如下所示:

__test(function(a,b,c){"use strict"; ....
__test(function(a,b,c){"use strict"; ....
__test(function(a,b,c){"use strict"; ....
__test(function(a,b,c){"use strict"; ....

如果我们有上面的代码,函数将如何执行?我知道 Javascript 不支持函数重载,但我想知道 use strict 指令是否会改变这种行为。

【问题讨论】:

    标签: javascript overloading


    【解决方案1】:

    请参阅有关 JavaScript 中函数重载的答案:Function overloading in Javascript - Best practices。 JavaScript 不支持任何版本的语言的重载,因此"use strict" pragma 不会改变这种行为。

    JavaScript 不使用函数的签名来识别函数。函数是一种特定类型的对象,和对象一样,实例可以作为参数传递或分配给不同的变量,同时保持相同的实例。这是因为它们是根据它们在内存中的位置来识别的,并且传递的所有内容都是对该实例的内存地址的引用。无论如何引用,每个实例都保持唯一,因此不可能重载函数,因为每个函数声明都会创建一个与任何其他函数无关的新的唯一实例。

    【讨论】:

    • 什么是__test?
    • 这看起来像一个函数调用。传递给 __test 函数的第一个参数是匿名函数声明。然后 __test 函数可以调用传入的参数,每次都做不同的事情,因为每次它调用不同的函数。尽管匿名函数的签名看起来都一样,但每个都是唯一的实例并且可以具有不同的行为,因为在 JavaScript 中,函数是一种对象。
    猜你喜欢
    • 2011-08-26
    • 2013-10-08
    • 1970-01-01
    • 2014-08-12
    • 2016-12-31
    • 2013-02-14
    • 1970-01-01
    • 2015-03-02
    相关资源
    最近更新 更多