Javascript 正在执行声明的(所有)函数

Javascript is executing (all) functions when they are declared

当我加载 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>

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

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

..等等

请注意使用 var 而不是 function,并且缺少 new 关键字。

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

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.

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

variable = new <something>;

表示调用函数<something>作为对象构造函数,例如

var myObj = new Array;

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

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

要将函数本身赋值给变量,不要使用new

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