【问题标题】:Javascript is executing (all) functions when they are declared声明时,Javascript正在执行(所有)函数
【发布时间】:2018-01-04 21:57:08
【问题描述】:

当我加载一个 html 页面时,尽管没有引用它们,但会调用一系列 javascript 函数。以下函数会提醒用户“hello”和“world”,即使我没有调用 validate 或 donotcall2

<script >
var validate = new function() {
    alert('hello');
};

var donotcall1 = function() {
    alert('hello cruel');
    return false;
};

var donotcall2 = new function() {
    alert(' world');
};
</script>

【问题讨论】:

  • 我收到一个错误:Expected '(' 缺少参数列表。
  • 这些都没有任何意义。您是否将代码错误地复制到您的问题中?
  • 我现在正在修复它。
  • 更新后...它应该在 'hello' 之后发出 'world' 警报,但您是在指示它执行其他操作吗?
  • 我在一个页面中有很长的 javascript 集,并花了一天时间试图弄清楚为什么要调用 5 个函数。当我在这里发布问题时,一位同事正在测试代码并解决了它。当他们解决它时,我没有在这里发布 140 行 js,而是将问题简化为表示问题的基本集合。 (并输入错误)。我可以在创建问题时发布解决方案,但 2 天内无法选择答案

标签: javascript html function load


【解决方案1】:

问题是您使用的是new。当你写:

variable = new <something>;

表示将函数&lt;something&gt;作为对象构造函数调用,例如

var myObj = new Array;

调用Array()作为构造函数,返回的对象赋值给myObj

虽然这通常使用命名函数来完成,但它与匿名函数的工作方式完全相同,这就是您的代码正在做的事情。它定义了一个匿名函数,然后将其作为对象构造函数调用,并将返回的对象分配给变量validate

要将函数本身分配给变量,请不要使用new

var validate = function() {
    alert("Hello");
};

【讨论】:

    【解决方案2】:

    您使用的符号不正确。请改用以下内容。

    var validate = function() {
      alert("Hello");
    }
    

    .. 等等

    注意使用var 而不是function,并且没有new 关键字。

    【讨论】:

    • 为什么投反对票?我给出了一个满足 OP 需求的答案。我的代码用于所选答案。
    【解决方案3】:

    声明变量的正常方式(这就是你正在做的)是:

    const donotcall1 = function() {
    // if you want to reassign donotcall1 later use let instead of const
        alert('hello cruel');
        return false;
    };
    

    (在 ES5 及更低版本中,您将使用 var 而不是 constlet

    你也可以使用

    function donotcall1 () {
        alert('hello cruel');
        return false;
    };
    

    Note the subtle difference.

    【讨论】:

    • 并在函数前使用“新”一词会导致执行以下函数。
    • 谁反对这个,你能解释一下原因吗?我写的都是真实的,并且解决并解决了问题
    • 是的,如果不被垃圾邮件否决,似乎无法再在这里发布问题或回答。只是踢别人而不解释改进是社区杀戮
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多